たとえば、__index
2つの引数を取るメタメソッドを宣言してから、次のようなことを行うことはできますmyuserdata[somearg1, somearg2]
か?私はそれを使いたいというわけではなく、なぜそれが役立つのか考えているわけではありません。c++をLuaにバインドすることを扱うライブラリで、権利を強制できるかどうか、そして強制する必要があるかどうか疑問に思っています(__call
もちろんメタメソッドを除く) metamethodとしてバインドされた関数の引数の数。
3 に答える
Luaは一般的に関数にパラメーターカウントを強制しません:http://ideone.com/kAynR
とは言うものの、構文にマップするメタメソッドは構文によってバインドされます。たとえば、Lua構文では、インデックス,
内で-separated値を使用できません。[]
luac: ']' expected near ','
Lua関数は任意の数の関数を受け取ることができます。これは、メタメソッドにも当てはまります。
ただし、メタテーブルでは、演算子のアリティを変更することはできません。単項演算子(not、#など)のメタメソッドは、1つの引数でのみ渡されます。二項演算子(+、%、==、^、..など)のメタメソッドには、 2つの引数のみが渡されます。
テーブルのインデックス作成操作は、Lua文法で、1つの引数を取るものとして定義されているため、使用できるのはそれだけであり、インデックス作成のためのすべてのメタメソッドが受け取ります。
任意の数のarumentsを受け取ることができる唯一のメタメソッドはcall
です。
いいえ、C ++の場合と同様に、インデックス演算子は1つの引数しか取ることができません。インデックス演算子の関数は必要な数の引数を持つことができますが、実際に内部で複数の引数を使用しようとすると[]
、エラーが発生します。
オペレーターによって異なります。したがって、それを「強制」することはできず、またその必要もありません。