考虑下面的Lua代码:
local util = {}
function util:foo(p)
print (p or "p is nil")
end
util.foo("Hello World")
util.foo(nil, "Hello World")
当我在lua控制台中运行时,我得到以下结果:
p is nil
Hello World
有人可以向我解释这种行为。
修改 我通过进行以下更改来使代码工作:
local util = {}
function util.foo(p)
print (p or "p is nil")
end
util.foo("Hello World")
util.foo(nil, "Hello World")
我对Lua相当新,所以任何解释此行为的指针/链接都将受到赞赏。
答案 0 :(得分:10)
http://www.lua.org/pil/16.html
使用:语法声明函数时,有一个未指定的参数'self',它是函数正在处理的对象。您可以使用冒号语法调用该方法:
util:foo("Hello World")
如果使用点表示法,则将该函数作为util表中的条目引用,您必须自己传递“self”。
使用冒号声明foo,这两个调用是等效的:
util:foo("Hello World")
util.foo(util, "Hello World")
要使用点语法声明这一点,您可以这样做:
function util.foo(self, p)
print (p or "p is nil")
end
或
util.foo = function(self, p)
print (p or "p is nil")
end