我们说我unpack(4)
或unpack("hello world")
。这有什么意外的行为吗?
原因是这样的:
function a(bool)
if bool then
return {1, 2}, "foo"
else
return 1, "foo"
end
end
function b(x, z)
end
function b(x, y, z)
end
i, j = a(???)
b(unpack(i), j) -- is this ok?
答案 0 :(得分:3)
unpack(4)
会导致错误
尝试获取数字值的长度
unpack("hello world")
将返回
nil nil nil nil nil nil nil nil nil nil nil
所以这也不是很有用。
unpack用于解压缩表。如果您使用最新版本的Lua,您会注意到它现在是table.unpack()
您的代码存在其他问题:
Lua不支持重载功能。函数是变量。
你写道:
function b(x, z)
end
function b(x, y, z)
end
处理第二个定义后,第一个定义将丢失。 如果你使用另一种表示法,它会更清楚。 您的代码等同于
b = function (x, z)
end
b = function (x, y, z)
end
我认为你会同意
之后b = 3
b = 4
b
将是4.同样的原则......
答案 1 :(得分:2)
您可以修改unpack
标准函数以获得所需的行为:
local old_unpack = table.unpack or unpack
local function new_unpack(list, ...)
if type(list) ~= "table" then
list = {list}
end
return old_unpack(list, ...)
end
table.unpack = new_unpack
unpack = new_unpack
-- Usage:
print(unpack(4))
print(unpack("hello world"))
print(unpack(nil)) -- ops! nothing is printed!