4

__metatable メタメソッドをエスケープする方法があるかどうか疑問に思っていました。私は1つがないことを知っていますが、私はこのようなことをしようとしていますが、明らかに __metatable はそれが起こらないようにブロックします:

    -- pretend that there is a __metatable field given to a table
    setmetatable(_G, {__index = {None="No indexes"}})
    -- error: (the string given to the __metatable metamethod)

ここで私がやろうとしているのは、単に __metatable フィールドを通り過ぎてエスケープし、既に 1 つある _G にメタテーブルを設定できるようにすることです。これが不可能であることは承知していますが、まだバイパスする機会があるかどうかお尋ねしたいのですが?

4

2 に答える 2

5

Lua からこれを行う唯一の方法は、 を使用することdebug.setmetatableです。

全体のポイント__metatableは保護です。デバッグ ライブラリは、この保護 (およびその他) をバイパスするため、もちろん注意して使用する必要があります。

于 2015-03-29T13:06:29.630 に答える
-2

メタテーブルをオーバーライドするだけです。

を使用してそれを行うことができますsynapse x overridemetables()

于 2020-11-17T18:42:02.493 に答える