Я использую torch.CmdLine() для анализа аргументов командной строки в Torch. Мне нужно передать массив элементов для одной из переменных. Я не знаю никаких механизмов передачи массива элементов для переменной. Поэтому я рассматриваю эту переменную как строку и передаю массив элементов, разделенных пробелом, и заключен в двойные кавычки из командной строки. Код для этого выглядит следующим образомTorch: CmdLine(): передача массива элементов в переменную из командной строки
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)
я могу сделать некоторые обходные пути, чтобы исправить это (а не перекрывая использование __index string.sub (ул, я, я) напрямую), но я хотел бы знать ваши предложения по передаче массива элементов с использованием torch.CmdLine() элегантным способом - если применимо.
Спасибо заранее.
Эй! проверьте документы: https://github.com/torch/torch7/blob/master/doc/cmdline.md#table-parsearg и этот ответ http://stackoverflow.com/questions/32379841/lua-cmd-line- строка. Надеюсь, поможет! –
@ManuelLagunas Я делаю что-то очень похожее. Но мне было интересно, могу ли я передать массив элементов в другом формате, отличном от строки. Спасибо за ваше предложение. – Arul