0

这是我的代码:

#!/usr/bin/env ruby
# OptionParser
require 'optparse'

options = {}
optparse = OptionParser.new do|opts|
    opts.banner = '...'

    # This option inputs ...
    options[:Lap1] = []
    opts.on('-1', '--Lap1 filepath1,width1,height1,a1,first1,last1', String, '...') do|l1|
        options[:Lap1] = l1.split(',')  
    end
end
optparse.parse!

我的目标是有一个用逗号分隔的单独输入数组。但是,此代码仅输出第一个变量$filepath1

输出:

puts(options[:Lap1])

puts(options[:Lap1][0]

只是第一个变量filepath1

puts(options[:Lap1][1])

就是nil,什么时候应该是变量width1

任何建议或潜在的修复都会有所帮助,谢谢。

4

2 回答 2

0

我会以不同的方式编写该代码:

require 'optparse'
require 'pp'

options = {
  :Lap1 => []
}

optparse = OptionParser.new do |opts|
  opts.banner = '...'

  # This option inputs ...
  opts.on(
    '-1', '--Lap1 filepath1,width1,height1,a1,first1,last1',
    Array,
    '...'
  ) { |l1| options[:Lap1] = l1 }
end.parse!
pp options

在命令行运行它:

ruby test.rb -1 filepath1,width1,height1,a1,first1,last1

结果是:

{:Lap1=>["filepath1", "width1", "height1", "a1", "first1", "last1"]}

使用--Lap1以下结果进行测试:

ruby test.rb --Lap1 filepath1,width1,height1,a1,first1,last1

和:

{:Lap1=>["filepath1", "width1", "height1", "a1", "first1", "last1"]}

在我看来,您应该在定义options哈希时设置默认值。

options = {
  :Lap1 => []
}

另外,请注意使用Array代替String。如果您使用 OptionParser 将自动将逗号分隔的字符串拆分为单个元素的数组Array,从而为您节省该split步骤,并避免一些令人困惑的代码。有关更多信息,请参阅 OptionParsermake_switch方法的文档。

于 2013-09-10T19:28:25.103 回答
0

你需要调用解析!声明所有选项后,您的 OptionParser 对象上的方法。

optparse.parse!
于 2013-09-10T19:07:13.743 回答