即使我只声明了一个参数的函数,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 还比较新,所以任何指针/链接来解释这种行为将不胜感激。

原文链接 https://stackoverflow.com/questions/4983263

点赞
stackoverflow用户369792
stackoverflow用户369792

当你使用 : 语法声明一个函数时,有一个未指定的参数 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
2011-02-13 08:55:03