牙列缺损

1797 ワード

setmetatable (table, metatable)
Luaの はmetatableで できます.このmetatableは、 の における の の を するために される のLua tableです.metatableの のドメインに を することで、このmetatableの を つ された の を できます.たとえば、 の が されると、Luaはそのmetatableの"__add"ドメインに があるかどうかをチェックします.このような があれば、Luaはこの を び して を します.
metatableのキー をイベント(event)と び,その をメタメソッド(metamethod)と ぶ. の では、イベントは"add"であり、メタメソッドは、 を する である.getmetatable を して、 の のmetatableをクエリーできます.setmetatable でtableのmetatableを き えることができます.Luaから の のタイプの のmetatableを することはできません(debugライブラリの を します).そうするにはC APIを わなければなりません.
tableとuserdataは したmetatableを っている(もちろん、 のtableとuserdataは じテーブルを してmetatableとすることができる). のすべてのタイプの は、 タイプが のmetatableを します.そのため、すべての は に1つのmetatableしかなく、すべての も、などです.
1つのmetatableは、オブジェクトが 、 、 、 さ 、スケールダウン を うときの を し、metatableではuserdataをゴミ に び す を することもできます.これらの に して、Luaは、 のイベントと ばれる に けられる.Luaがこれらの のいずれかを する がある 、 のmetatableに するイベントがあるかどうかを します.もしあるならば、キー の する (メタメソッド)はLuaがどのようにこの をするかを します.
metatableが できる は に されています. は する で されます. のキー は、 に2つの '__'の を けた である. えば、「add」 のキー は、 "__add"である.これらの の は, がどのように されるかをLua で するのにより である.
setmetatable
Sets the metatable for the given table. (You cannot change the metatable of other types from Lua, only from C.) If  metatable  is nil, removes the metatable of the given table. If the original metatable has a  "__metatable"  field, raises an error.
This function returns  table .