Jump to content

meta tables


Recommended Posts

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

فيه بديل

table.count : useful function

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

كيف؟

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

اقصد اني مني فاهم وش يقصد يطلع من اللوب

بس اعتقد انه حجم الجدول :mrgreen:

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

كيف؟

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

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

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

  • 1 month later...
Posted (edited)

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

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

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

Edited by #Plair07
Posted

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

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

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

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

t1+t2

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

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

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

زي كذا

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

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

 

Posted
1 hour ago, </Mr.Tn6eL> said:

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

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

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

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

t1+t2

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

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

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

زي كذا

 


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

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

هو مثل math.random

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

Posted
17 hours ago, #KraTos^_^ said:

شَرْح جَمِيِل .  الله يعطيك العافيةة  

نورت كراتوس 

  • 7 months later...
Posted (edited)

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

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

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
Posted (edited)
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
Posted

والله اني كنت ادور بالقسم الأنجليزي ما ظنيت  يكون فيه شرح عن شي متقدم نوعا ما زي الميتا تيبل و الـ Object oriented Programming

أهنيكم

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...