Vararg(`...`)函数参数不适用于`arg`变量

时间:2018-01-16 03:43:17

标签: lua arguments torch

对于lua,根据本教程,函数的三个点可以通过名为arg的隐藏变量访问。

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

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

require 'torch'
function triDot(...)
    print('in triDot now')
    print(arg)
    for i,v in ipairs(arg) do
        print('i is',i,'v is',v)
    end
end
triDot('name1','name2') 

事实证明,除了一堆系统参数之外,arg根本没有{'name1','name2'}。 对于循环没有产生任何

{   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 =”/家庭月/ 6 / .luarocks / lib中/ LUA / 5.1 /?左右; /home/jun/torch/install/lib/lua/5.1 /?左右; “.. package.cpath”   -4:“ - e”   -1:“local k,l,_ = pcall(require,”luarocks.loader“)_ = k和l.add_context(”trepl“,”scm-1“)” }

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:3)

arg不适用于Lua 5.1+中的函数参数(它可以在5.1中启用一些兼容性选项;它仅适用于脚本参数)。您需要使用local arg = {...}将函数参数分配给表,或使用select(i, ...)从列表中获取第i个参数,并select('#', ...)获取参数数量。前者更简单,但后一个选项可以处理传递参数中的nil值,因此如果您期望nil值,请使用它。