例如,我可以为__index
声明一个带有两个参数的元方法,然后执行类似myuserdata[somearg1, somearg2]
的操作吗?不是我想要使用它或者我知道为什么它会有用,我只是想知道在我的库中是否处理将c ++绑定到Lua我可以而且应该强制执行权利({{1}除外)当然是metamethod)作为元方法绑定的函数的参数数量。
答案 0 :(得分:1)
Lua一般不对函数强制执行参数计数:http://ideone.com/kAynR
也就是说,映射到语法的元方法受语法约束 - 例如,Lua语法不允许,
- []
索引内的分隔值:
luac: ']' expected near ','
答案 1 :(得分:1)
Lua函数可以接收任意数量的函数。对于你的metamethods也是如此。
然而,metatables不允许你改变运营商的优势。一元运算符(不是#等)的元方法只能在一个参数上传递。二元运算符的元方法(+,%,==,^,..等)只会传递两个参数。
表索引操作在Lua语法中定义为接受一个参数,因此您可以使用所有这些操作,并且所有用于索引的元方法都将接收。
唯一可以获得任意数量的武器的元方法是call
。
答案 2 :(得分:0)
不,索引运算符只能接受一个参数,就像在C ++中一样。虽然索引操作符的函数可以包含任意数量的参数,但如果您实际尝试在[]
内使用多个参数,则会出现错误。
这取决于运营商。所以你既不能也不需要“强制执行”。