我不明白为什么会发生这种情况。 我正在使用Moonsharp在我的应用程序中运行LUA脚本,我创建了一个LUA函数IN(v,...),并且我希望用成对的it参数进行迭代。
IN('param1', 'param2', 'param1') -- expected it to return true
function IN(v, ...)
local args = ...
local res = true
for i, v in pairs(args) do
if valueIn == v then
res = true
break
end
end
return res
end
如果它被调用,我会收到以下异常:
" MoonSharp.Interpreter.ScriptRuntimeException" 不好的论点#1到' next' (表格预期,得到字符串)
所以我决定检查我的...变量中是否有字符串而不是表格。
function args(v, ...)
return ...
end
C#中的返回值是2个值的元组,其中' param2'和' param1',所以它应该与成对或ipairs一起工作,不应该吗?
提前致谢。
答案 0 :(得分:4)
在您的示例中使用此定义:
function test(...)
local arg = ...
end
并致电
test(1,2,3)
将导致
local arg = 1, 2, 3
当然只将1分配给arg。其余部分被省略。
但是当表构造函数将...
作为输入时,您可以编写
local arg = {...}
或者然后愉快地迭代你的新表arg。
...
不是lua刚刚告诉你的一张桌子。因此,您无法迭代...
或者,本地arg = table.pack(...)
也可以使用。
如果你很好奇,Lua 5.1中的vararg系统已经改变了 https://www.lua.org/manual/5.1/manual.html#7.1
vararg系统从伪参数arg改为一个表 使用vararg表达式的额外参数。 (参见编译时 luaconf.h中的选项LUA_COMPAT_VARARG。)
因为你可以做类似
的事情function test(...)
for k,v in pairs(arg) do
print("I'm a generic for loop yeah!!!")
end
end
所以local arg = {...}
不是必需的。