即使我用一个参数声明了函数,Lua函数也需要两个参数

时间:2011-02-13 08:46:48

标签: lua

考虑下面的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相当新,所以任何解释此行为的指针/链接都将受到赞赏。

1 个答案:

答案 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