【发布时间】:2017-01-05 05:14:10
【问题描述】:
我正在使用 torch.CmdLine() 来解析 Torch 中的命令行参数。我需要为其中一个变量传递一个元素数组。我不知道为变量传递元素数组的任何机制。所以我将该变量视为一个字符串,并从命令行传递以空格分隔并用双引号括起来的元素数组。 执行此操作的代码如下所示:
cmd = torch.CmdLine()
cmd:text('Training')
cmd:text()
cmd:option('-cuda_device',"1 2 3")
params = cmd:parse(arg or {})
--parse the string to extract array of numbers
for i=1,string.len(params.cuda_device) do
if params.cuda_device[i] ~= ' ' then
-- some code here
end
end
这里由于默认不提供 Lua 字符串索引,我必须重写 __index 以启用字符串索引,如下所示,
getmetatable('').__index = function(str,i) return string.sub(str,i,i) end
这适用于将字符串解析为数字数组。
但是,覆盖 __index 会在其他地方破坏代码,引发以下错误:
qlua: /home/torch/install/share/lua/5.1/torch/init.lua:173: bad argument #2 to '__index' (number expected, got string)
我可以做一些变通方法来解决这个问题(而不是直接使用 string.sub(str,i,i) 覆盖 __index),但我想知道您在使用 torch.CmdLine() 传递元素数组时的建议一种优雅的方式——如果适用的话。
提前致谢。
【问题讨论】:
-
嘿!检查文档:github.com/torch/torch7/blob/master/doc/… 和这个答案 stackoverflow.com/questions/32379841/lua-cmd-line-string 。希望对您有所帮助!
-
@ManuelLagunas 是的,我正在做一些非常相似的事情。但我想知道是否可以以字符串以外的其他格式传递元素数组。感谢您的建议。
标签: lua command-line-arguments torch