optionparser将数组传递给ruby文件
我在向ruby文件传递参数时遇到问题。即optionparser将数组传递给ruby文件,ruby,optionparser,Ruby,Optionparser,我在向ruby文件传递参数时遇到问题。即 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! 这种方法要求我编写以下命令
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
如何实现此功能?我在文档中找不到关于这方面的任何有用信息。使用
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
支持script-f1-f2-ff3
,options[:filenames]| ARGV
而不是options[:filenames]|=ARGV
?我在ruby api中找不到|=
方法a |=b
是a=a | b
在ruby范围内的缩写。在阵列上,这是一个。谢谢,但我想要的正是我想要的。还有其他ruby库吗?您希望这个解析器如何处理-f a.txt-g
,其中-g是完全有效的现有文件名?我不需要解析器中的-g
标志:)