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 = {...} 没有必要。