Luaのメタテーブル
2095 ワード
metatableはtableの行動を変えることができます
>Luaの各テーブルにはmetatableがあります(後でuserdataにもMettableがあります)
>Luaデフォルトでmetatableなしの新しいテーブルを作成
>setmetatable(tableのみ)とgetmetatable(任意のオブジェクト用) setmetatable関数を使用して、テーブルのmetatable を設定または変更できます.どのテーブルも他のテーブルのmetatable であってもよい関連するテーブルのセットは、metatable(共通の動作を記述する) を共有することができる.テーブルは、自身のmetatable(そのプライベートな動作を記述する) であってもよい
>【メタテーブルに_metatableキー値がある場合、setmetatableは失敗します】
>【メタテーブルにmetatableキー値が存在する場合、metatableの値を返す】
転載先:https://www.cnblogs.com/luweimy/p/4094380.html
>Luaの各テーブルにはmetatableがあります(後でuserdataにもMettableがあります)
>Luaデフォルトでmetatableなしの新しいテーブルを作成
>setmetatable(tableのみ)とgetmetatable(任意のオブジェクト用)
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