Lua是否允许使用奇怪数量的参数进行metamethods?

时间:2012-05-01 22:22:39

标签: lua operators metatable lua-userdata

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

3 个答案:

答案 0 :(得分:1)

Lua一般不对函数强制执行参数计数:http://ideone.com/kAynR

也就是说,映射到语法的元方法受语法约束 - 例如,Lua语法不允许, - []索引内的分隔值:

luac: ']' expected near ','

答案 1 :(得分:1)

Lua函数可以接收任意数量的函数。对于你的metamethods也是如此。

然而,metatables不允许你改变运营商的优势。一元运算符(不是#等)的元方法只能在一个参数上传递。二元运算符的元方法(+,%,==,^,..等)只会传递两个参数。

表索引操作在Lua语法中定义为接受一个参数,因此您可以使用所有这些操作,并且所有用于索引的元方法都将接收。

唯一可以获得任意数量的武器的元方法是call

答案 2 :(得分:0)

不,索引运算符只能接受一个参数,就像在C ++中一样。虽然索引操作符的函数可以包含任意数量的参数,但如果您实际尝试在[]内使用多个参数,则会出现错误。

这取决于运营商。所以你既不能也不需要“强制执行”。