0

例如,我可以声明一个带有__index两个参数的元方法,然后执行类似的操作myuserdata[somearg1, somearg2]吗?并不是说我想使用它,或者我知道它为什么有用,我只是想知道在我处理将 c++ 绑定到 Lua 的库中我是否可以并且应该强制执行一项权利(__call当然元方法除外)绑定为元方法的函数的参数数量。

4

3 回答 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 回答