Jump to content

meta tables


Recommended Posts

  • 2 weeks later...
  • 4 months later...

موضوع مهم صراحه واكاد اجزم بأن 90% من المنتدى العربي اللي يعرفون البرمجه مايعرفون للميتا تيبل,

'#' وعندي اضافه لـ

لو كنت حاط اندكس بالترتيب وحطيت اندكس اكبر من الاندكسات الأخرى بكثر ما يطلعها لك,

كـ مثال لكلامي :

t = { 
    [1] = 1, 
    [2] = 2, 
    [3] = 3, 
    [200] = 200 
} 
  
print ( #t ) -- 3 
Link to comment
موضوع مهم صراحه واكاد اجزم بأن 90% من المنتدى العربي اللي يعرفون البرمجه مايعرفون للميتا تيبل,

'#' وعندي اضافه لـ

لو كنت حاط اندكس بالترتيب وحطيت اندكس اكبر من الاندكسات الأخرى بكثر ما يطلعها لك,

كـ مثال لكلامي :

t = { 
    [1] = 1, 
    [2] = 2, 
    [3] = 3, 
    [200] = 200 
} 
  
print ( #t ) -- 3 

نورت الموضوع يا شاطح

وشكراً علي اضافتك :~)

بضيفها بلشرح .

Link to comment
موضوع مهم صراحه واكاد اجزم بأن 90% من المنتدى العربي اللي يعرفون البرمجه مايعرفون للميتا تيبل,

'#' وعندي اضافه لـ

لو كنت حاط اندكس بالترتيب وحطيت اندكس اكبر من الاندكسات الأخرى بكثر ما يطلعها لك,

كـ مثال لكلامي :

t = { 
    [1] = 1, 
    [2] = 2, 
    [3] = 3, 
    [200] = 200 
} 
  
print ( #t ) -- 3 

فيه بديل

table.count : useful function

Link to comment
^ مايحتاج تقدر تطلعها من اللوب :).

كيف؟

اقصدك تقدر تجيب الحجم يعني كم عدد الاندكسات داخل الجدول .

local var
for Key, Value in pairs(Table) do
    var = (var or 0) + 1
end

Key ايه ذا اللي اقصده .. وبالمره تقدر تطلع رقم الاندكس من خلال.

Link to comment
  • 1 month later...

مشكور عالشرح وماقصرت ولا هان تعبك ..

بغيت اسأل الحين وش الميتا تيبل و وش إستخداماته , هل هو مثل ال اس كيو ال ولا وش نظامه بالضبط

لأن اول مره اسمع فيه وماقد شفته بمود قبل كذا :D ..

Edited by #Plair07
Link to comment

تستخدم لتغير طريقة استخدام الجداول وسلوكها

الجداول تكون فقط لحفظ القيم

لكن مع الميتا تيبل تقدر تسوي كلاسات وأشياء خارج عن المعتاد في الجداول

يمديك تزود قيمة جدول مع جدول

t1+t2

وتنقصه وتضربه وتخلي زي الفنكشن تقدر تستدعيه t( )

ومو مختص بالجداول فقط تقدر تحطه على السترنق

مثلا اذا اي سترنق بالكود تم استدعائه يطبعه بالكونسل

زي كذا

getmetatable("").__call = function(s)
    print(s)
end

("helloworld")()
-- الاقواس للفصل عشان مايجينا خطأ

 

Link to comment
1 hour ago, </Mr.Tn6eL> said:

تستخدم لتغير طريقة استخدام الجداول وسلوكها

الجداول تكون فقط لحفظ القيم

لكن مع الميتا تيبل تقدر تسوي كلاسات وأشياء خارج عن المعتاد في الجداول

يمديك تزود قيمة جدول مع جدول

t1+t2

وتنقصه وتضربه وتخلي زي الفنكشن تقدر تستدعيه t( )

ومو مختص بالجداول فقط تقدر تحطه على السترنق

مثلا اذا اي سترنق بالكود تم استدعائه يطبعه بالكونسل

زي كذا

 


getmetatable("").__call = function(s)
    print(s)
end

("helloworld")()
-- الاقواس للفصل عشان مايجينا خطأ

هو مثل math.random

وهالشغلات ولا انا غلطان ؟ لأن إذا هو عرفته م يحتاج وإذا انه شيء ثاني لزوم نتعمق به مع الوقت .

Link to comment
  • 7 months later...

مشكور ي دابل عـ شرح ,

هنا بعض الامثلة :

MetaTabel = { -- سوينا جدول :)
  Meta = { }, -- نسوي جدول فاضي عشان نحوله ميتا
  New = function ( Num1, Num2 ) -- نسوي وظيفة فيها بارتمرين الي هم الرقم الاول والثاني
    local Wifi_ = { } -- نسوي جدول 
    setmetatable(Wifi_,Meta) -- نربط الجدول بالجدول الفارغ ونخليه ميتا تيبل
    Wifi_.Num1 = Num1; -- نحط قيمة للرقم الاول
    Wifi_.Num2 = Num2; -- نحط قيمة للرقم الثاني عشان نجلبه
    Wifi_.Meta = MetaTabel.Meta; -- نحفظ الميتا في الجدول
    return Wifi_; -- نرجع القيمة جدول
  end, -- آند :" وفاصلة عشان نضيف وظيفة ثانية اذا اردنا
  Result = function ( Wish ) -- نسوي وظيفة تعطينا الجواب البارتمر الاول نطلب فيه الجدول الي فيه القيم
  local Res = Wish.Num1 + Wish.Num2; -- نجمع القيم
  return print(tostring(Res)) -- نرجع طباعة للنتيجة
  end -- آند

} -- أقفال القوس

dabl = MetaTabel.New ( 208, 202 ) -- نسوي عملية 
MetaTabel.Result ( dabl ) -- نطبع النتيجة
--[[
410 
]]
wifi = MetaTabel.New ( 2304, 1242 ) -- نسوي عملية 
MetaTabel.Result ( wifi ) -- نطبع النتيجة
--[[
3546
]]

 

 

    Calc = { } -- نسوي جدول فاضي عشان نحوله ميتا
    Calc.__index = Calc -- لما يستدعي شيء غير موجود بيرجعه Calc.New()
    setmetatable(Calc, {__call = function (win, ...) return win.New(...) end}) -- لما يستدعي شيء غير موجود بيرجعه Calc.New()
    local Wifi_ = { } -- نسوي جدول  

      function Calc.New( )
        return setmetatable(Wifi_,Calc); -- نربط الجدول بالجدول الفارغ ونخليه ميتا تيبل
      end -- آند
      
      function Calc:SetValues( FNum, SNum )
      Wifi_.Num1 = FNum; -- نحط القيمة بأسم Num1
      Wifi_.Num2 = SNum; -- نحط القيمة بأسم Num2
    end -- آند

      function Calc:Result( )
      local Res = Wifi_.Num1 + Wifi_.Num2; -- نجمع القيم
      return print(tostring(Res)) -- نرجع طباعة للنتيجة
    end -- آند


    dabl = Calc ( ) -- نسوي عملية 
    dabl:SetValues(208, 202) -- نضع القيم
    dabl:Result ( ) -- نطبع النتيجة
    --[[
    410 
    ]]

    wifi = Calc( ) -- نسوي عملية 
    wifi:SetValues(2304, 1242) -- نضع القيم
    wifi:Result ( ) -- نطبع النتيجة
    --[[
    3546
    ]]

 

^ مثال آخر + الموضوع جداً مهم , لاحد يقول قديم :@

+ أي واحد مافهم المثال يسئلني : )

Edited by !#NssoR_)
Modified as requested.
  • Like 2
Link to comment
4 hours ago, iMr.WiFi..! said:

مشكور ي دابل عـ شرح ,

هنا بعض الامثلة :


MetaTabel = { -- سوينا جدول :)
  Meta = { }, -- نسوي جدول فاضي عشان نحوله ميتا
  New = function ( Num1, Num2 ) -- نسوي وظيفة فيها بارتمرين الي هم الرقم الاول والثاني
    local Wifi_ = { } -- نسوي جدول 
    setmetatable(Wifi_,Meta) -- نربط الجدول بالجدول الفارغ ونخليه ميتا تيبل
    Wifi_.Num1 = Num1; -- نحط قيمة للرقم الاول
    Wifi_.Num2 = Num2; -- نحط قيمة للرقم الثاني عشان نجلبه
    Wifi_.Meta = MetaTabel.Meta; -- نحفظ الميتا في الجدول
    return Wifi_; -- نرجع القيمة جدول
  end, -- آند :" وفاصلة عشان نضيف وظيفة ثانية اذا اردنا
  Result = function ( Wish ) -- نسوي وظيفة تعطينا الجواب البارتمر الاول نطلب فيه الجدول الي فيه القيم
  local Res = Wish.Num1 + Wish.Num2; -- نجمع القيم
  return print(tostring(Res)) -- نرجع طباعة للنتيجة
  end -- آند

} -- أقفال القوس

dabl = MetaTabel.New ( 208, 202 ) -- نسوي عملية 
MetaTabel.Result ( dabl ) -- نطبع النتيجة
--[[
410 
]]
wifi = MetaTabel.New ( 2304, 1242 ) -- نسوي عملية 
MetaTabel.Result ( wifi ) -- نطبع النتيجة
--[[
3546
]]

 

 


    Calc = { } -- نسوي جدول فاضي عشان نحوله ميتا
    Calc.__index = Calc -- لما يستدعي شيء غير موجود بيرجعه Calc.New()
    setmetatable(Calc, {__call = function (win, ...) return win.New(...) end}) -- لما يستدعي شيء غير موجود بيرجعه Calc.New()
    local Wifi_ = { } -- نسوي جدول  

      function Calc.New( )
        return setmetatable(Wifi_,Calc); -- نربط الجدول بالجدول الفارغ ونخليه ميتا تيبل
      end -- آند
      
      function Calc:SetValues( FNum, SNum )
      Wifi_.Num1 = FNum; -- نحط القيمة بأسم Num1
      Wifi_.Num2 = SNum; -- نحط القيمة بأسم Num2
    end -- آند

      function Calc:Result( )
      local Res = Wifi_.Num1 + Wifi_.Num2; -- نجمع القيم
      return print(tostring(Res)) -- نرجع طباعة للنتيجة
    end -- آند


    dabl = Calc ( ) -- نسوي عملية 
    dabl:SetValues(208, 202) -- نضع القيم
    dabl:Result ( ) -- نطبع النتيجة
    --[[
    410 
    ]]

    wifi = Calc( ) -- نسوي عملية 
    wifi:SetValues(2304, 1242) -- نضع القيم
    wifi:Result ( ) -- نطبع النتيجة
    --[[
    3546
    ]]

 

^ مثال آخر + الموضوع جداً مهم , لاحد يقول قديم :@

+ أي واحد مافهم المثال يسئلني : )

 

شرح واضح

 

 

Edited by Dr.Marco
Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...