optionparser将数组传递给ruby文件

时间:2015-04-29 06:06:27

标签: ruby optionparser

我将参数传递给我的ruby文件时遇到了麻烦。 IE,

OptionParser.new do |opts|
  opts.banner = 'Usage: mp3split.rb [options]'

  opts.on('-f', '--filename fName1,fName2,fName3', Array, 'absolute or relative pathes to file') { |f| options[:filenames] = f }
end.parse!

这种方法要求我编写这个命令:

ruby mp3split.rb --filename fursov_13.mp3,fursov_14.mp3,fursov_14_2.mp3,fursov_15.mp3,fursov_16.mp3,fursov_17.mp3

但是我希望通过这个得到阵列:

ruby mp3split.rb --filename fursov_13.mp3 fursov_14.mp3 fursov_14_2.mp3 fursov_15.mp3 fursov_16.mp3 fursov_17.mp3

如何实现此功能?我在文档中找不到任何有用的信息。

1 个答案:

答案 0 :(得分:1)

OptionParser你做不到。但是,有一种解决方法,当您需要处理这种方式的唯一列表时,您不会将其他参数传递给脚本。 OptionParser处理输入之前用空格拆分输入。解析后,未键控的参数保留在ARGV全局常量中。假设满足上述所有条件,我们就去:

OptionParser.new do |opts|
  options[:filenames] = []
  opts.banner = 'Usage: mp3split.rb [options]'        
  opts.on('-f', '--filename fName1 fName2 fName3', Array, 
          'absolute or relative pathes to file') do |f|
    options[:filenames] |= [*f]
  end
end.parse!

options[:filenames] |= ARGV

我显然修复了代码中的另一个小错误:options[:filenames]每次出现-f切换时OptionParser都应追加而不是覆盖 {{1} }}支持script -f f1 -f f2 -f f3