Moonsharp pairs(...) 引发异常 "bad argument #1 to 'next' (table expected, got string)"
Moonsharp pairs(...) raises exception "bad argument #1 to 'next' (table expected, got string)"
我不明白为什么会这样。
我在我的应用程序中使用 Moonsharp 到 运行 LUA 脚本,我创建了一个 LUA 函数 IN(v, ...) 我想遍历 ... 参数与对。
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"
bad argument #1 to 'next' (table expected, got string)
所以我决定检查我的 ... 变量中是否有字符串而不是 Table。
function args(v, ...)
return ...
end
C# 中的 return 值是具有 'param2' 和 'param1' 的 2 个值的元组,因此它应该与 pairs 或 ipairs 一起使用,不是吗?
提前致谢。
像您的示例一样使用此定义:
function test(...)
local arg = ...
end
并打电话
test(1,2,3)
将导致
local arg = 1, 2, 3
这当然只将 1 分配给 arg。其余省略。
但由于 table 构造函数将 ...
作为输入,您可以编写
local arg = {...}
或者然后愉快地遍历你的新 table arg。
...
不是 table 正如 lua 刚才告诉你的那样。因此你不能遍历 ...
或者本地 arg = table.pack(...)
也可以。
vararg 系统在 Lua 5.1 中已更改,以防您好奇
https://www.lua.org/manual/5.1/manual.html#7.1
The vararg system changed from the pseudo-argument arg with a table
with the extra arguments to the vararg expression. (See compile-time
option LUA_COMPAT_VARARG in luaconf.h.)
因为你可以做类似的事情
function test(...)
for k,v in pairs(arg) do
print("I'm a generic for loop yeah!!!")
end
end
所以 local arg = {...}
没有必要。
我不明白为什么会这样。 我在我的应用程序中使用 Moonsharp 到 运行 LUA 脚本,我创建了一个 LUA 函数 IN(v, ...) 我想遍历 ... 参数与对。
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" bad argument #1 to 'next' (table expected, got string)
所以我决定检查我的 ... 变量中是否有字符串而不是 Table。
function args(v, ...)
return ...
end
C# 中的 return 值是具有 'param2' 和 'param1' 的 2 个值的元组,因此它应该与 pairs 或 ipairs 一起使用,不是吗?
提前致谢。
像您的示例一样使用此定义:
function test(...)
local arg = ...
end
并打电话
test(1,2,3)
将导致
local arg = 1, 2, 3
这当然只将 1 分配给 arg。其余省略。
但由于 table 构造函数将 ...
作为输入,您可以编写
local arg = {...}
或者然后愉快地遍历你的新 table arg。
...
不是 table 正如 lua 刚才告诉你的那样。因此你不能遍历 ...
或者本地 arg = table.pack(...)
也可以。
vararg 系统在 Lua 5.1 中已更改,以防您好奇 https://www.lua.org/manual/5.1/manual.html#7.1
The vararg system changed from the pseudo-argument arg with a table with the extra arguments to the vararg expression. (See compile-time option LUA_COMPAT_VARARG in luaconf.h.)
因为你可以做类似的事情
function test(...)
for k,v in pairs(arg) do
print("I'm a generic for loop yeah!!!")
end
end
所以 local arg = {...}
没有必要。