Lua 这个函数返回什么
我这样称呼它:Lua 这个函数返回什么,lua,variadic-functions,Lua,Variadic Functions,我这样称呼它: function f(...) return ... end 范例 f() 但是 那么,f()返回什么呢 更新:不知道函数可以返回“void”,同时发现了此问题。关于类型的答案可能是此命令的输出: print(f()) -- echoes newline, same as print(), that is, no args t = {f()} -- same as t = {} 在本例中,它将打印: print(type(f())) 因此,需要一个值,但没有值。=>它
function f(...)
return ...
end
范例
f()
但是
那么,f()返回什么呢
更新:不知道函数可以返回“void”,同时发现了此问题。关于类型的答案可能是此命令的输出:
print(f()) -- echoes newline, same as print(), that is, no args
t = {f()} -- same as t = {}
在本例中,它将打印:
print(type(f()))
因此,需要一个值,但没有值。=>它不返回任何内容(void)
因此,这是一种正常的行为:t={f()}
t={}
关于赋值,如果没有值,Lua默认赋值为
nil
,它返回您调用它的所有参数
bad argument #1 to 'type' (value expected)
如果赋值的值小于变量的值,即
f() -- has no parameter, returns nothing
然后b和c都是零
另一方面,这一切都会起到一些作用:
local a, b = 3
local c
我发现Lua函数可以返回'nothing',甚至不能返回nil。在本例中,
f()
返回nothing
。使用nothing
(无赋值)会导致另一个函数调用(如print(f())
或表构造函数({f()}
)中的参数为零
print(a)
回显为nil,因为a
没有赋值,print(任何名称)
也将回显nil。函数始终返回值列表。函数可以有零个或多个返回语句,每个返回语句都返回零个或多个值的列表。如果函数结束时未执行返回语句,则返回一个无值列表。您已经看到了将值列表传递给另一个函数(打印),一个表构造函数({}),和(在您的问题中)一个返回语句。我对这个注释的补充是:调用函数时,堆栈上有函数参数。当函数返回时,堆栈上有结果。因此堆栈上可能有零值,“nothing”。在这种情况下,print不会输出任何值。f()之后
call堆栈上有零值。然后该堆栈被传递到print
call。“函数可以返回'void'”是(您认为print
返回什么)和否(您可以始终在表达式列表中使用函数的结果;编译器无法知道函数返回什么),也许(函数不必每次调用都返回具有相同数值的列表)。我认为“void”不是一个很好的描述。
local a, b = 3
local c
f(1) -- returns 1
f(1, 2, 3) -- returns 1, 2 and 3
local t = {f(1, 2, 3)} -- table with the values 1, 2 and 3