之间的区别。 和:在Lua

我很困惑函数调用之间的区别. 和通过:

 > x = {foo = function(a,b) return a end, bar = function(a,b) return b end, } > return x.foo(3,4) 3 > return x.bar(3,4) 4 > return x:foo(3,4) table: 0x10a120 > return x:bar(3,4) 3 

什么是:在做什么?

冒号是为了实现传递self方法作为第一个参数。 所以x:bar(3,4)应该和x.bar(x,3,4)

对于定义而言,它与手动指定自我完全相同 ,甚至会在编译时产生相同的字节码。 即function object:method(arg1, arg2)function object.method(self, arg1, arg2)

使用上: 几乎是一样的. – 一个特殊的调用将在内部使用,以确保object和计算/访问的任何可能的副作用只计算一次。 调用object:method(arg1, arg2)object.method(object, arg1, arg2)