Luaのメタテーブル

2095 ワード

metatableはtableの行動を変えることができます
>Luaの各テーブルにはmetatableがあります(後でuserdataにもMettableがあります)
>Luaデフォルトでmetatableなしの新しいテーブルを作成
>setmetatable(tableのみ)とgetmetatable(任意のオブジェクト用)
  • setmetatable関数を使用して、テーブルのmetatable
  • を設定または変更できます.
  • どのテーブルも他のテーブルのmetatable
  • であってもよい
  • 関連するテーブルのセットは、metatable(共通の動作を記述する)
  • を共有することができる.
  • テーブルは、自身のmetatable(そのプライベートな動作を記述する)
  • であってもよいsetmetatable
    >【メタテーブルに_metatableキー値がある場合、setmetatableは失敗します】 :setmetatable (table, metatable), table metatable getmetatable
    >【メタテーブルにmetatableキー値が存在する場合、metatableの値を返す】 :tmeta = getmetatable (tab), (metatable) __metatableを使用して、メタテーブルを保護し、ユーザがメタテーブルのメンバーにアクセスしたり、メタテーブルを変更したりすることを禁止します.
    print(getmetatable("lua")) -->table: 002F19B8
    print(getmetatable(10))    -->nil
    
    --   __metatable      ,                  。
    tA = {}
    mt = {}
    getmetatable(tA, mt)
    mt.__metatable = "lock"
    setmetatable(tA, mt)
    print(getmetatable(tA))  -->lock

     
    転載先:https://www.cnblogs.com/luweimy/p/4094380.html