Vararg (`...`)函数参数与`arg`变量不兼容

对于Lua来说,根据这个教程,函数的三个点可以通过一个隐藏的变量arg来访问。

https://www.lua.org/pil/5.2.html

我编写了一个非常简单的程序

require 'torch'
function triDot(...)
    print('现在在triDot中')
    printargfor i,v in ipairs(arg) do
        print('i为',i,'v为',v)
    end
end
triDot('name1','name2')

结果发现arg根本不包含{'name1','name2'},而是一堆系统参数。 For循环没有产生任何结果。

{ 0 : "/home/jun/torch/install/lib/luarocks/rocks/trepl/scm-1/bin/th" -2 : "-e" -5 : "/home/jun/torch/install/bin/luajit" -3 : "package.path="/home/jun/.luarocks/share/lua/5.1/?.lua;/home/jun/.luarocks/share/lua/5.1/?/init.lua;/home/jun/torch/install/share/lua/5.1/?.lua;/home/jun/torch/install/share/lua/5.1/?/init.lua;"..package.path; package.cpath="/home/jun/.luarocks/lib/lua/5.1/?.so;/home/jun/torch/install/lib/lua/5.1/?.so;"..package.cpath" -4 : "-e" -1 : "local k,l,_=pcall(require,"luarocks.loader") _=k and l.add_context("trepl","scm-1")" }

能有人帮忙吗?

点赞
用户1442917
用户1442917

在 Lua 5.1+ 中,arg 无法用于函数参数(在打开某些兼容选项的情况下可以在 5.1 中起作用;它只能用于脚本参数)。您需要使用 local arg = {...} 将函数参数分配给一个表,或使用 select(i, ...) 从列表中获取第i个参数以及 select('#', ...) 获取参数数量。前者更简单,但后一种选项可以处理传递的参数中的 nil 值,因此如果您希望处理 nil 值,请使用后者。

2018-01-16 05:09:38