2011-02-13 36 views
2

考虑下面的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的,所以任何指针/链路来说明这种行为可以理解的。

回答

10

http://www.lua.org/pil/16.html

在声明使用的功能:语法有一个未指定的参数“自我”,这是该功能作用的对象。您可以使用冒号语法调用方法:

util:foo("Hello World")

如果使用点符号,你引用的函数作为UTIL表中的条目,你必须通过“自我”自己。

与富贵用冒号声明,这两个调用是等价的:

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 
+0

如何直接调用`foo`方法? – 2011-02-13 09:00:39

相关问题