例如,我可以声明一个带有__index
两个参数的元方法,然后执行类似的操作myuserdata[somearg1, somearg2]
吗?并不是说我想使用它,或者我知道它为什么有用,我只是想知道在我处理将 c++ 绑定到 Lua 的库中我是否可以并且应该强制执行一项权利(__call
当然元方法除外)绑定为元方法的函数的参数数量。
问问题
316 次
3 回答
1
Lua 函数可以接收任意数量的函数。您的元方法也是如此。
但是,元表不允许您更改运算符的数量。一元运算符(not、# 等)的元方法只会在一个参数上传递。二元运算符(+、%、==、^、.. 等)的元方法只会传递两个参数。
表索引操作在 Lua 语法中被定义为接受一个参数,所以这就是您可以使用的所有内容,并且您的所有索引元方法都将收到。
唯一可以接收任意数量参数的元方法是call
.
于 2012-05-02T01:06:27.623 回答
1
Lua 通常不对函数强制执行参数计数:http: //ideone.com/kAynR
也就是说,映射到语法的元方法受语法约束——例如,Lua 语法不允许,
在索引中使用 -separated 值[]
:
luac: ']' expected near ','
于 2012-05-01T22:24:48.043 回答
0
不,索引运算符只能接受一个参数,就像在 C++ 中一样。虽然索引运算符的函数可以有任意多的参数,但如果您实际上尝试在内部使用多个参数,则会[]
出现错误。
这取决于运营商。所以你既不能也不需要“强制”它。
于 2012-05-01T22:24:02.060 回答