Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
optionparser将数组传递给ruby文件_Ruby_Optionparser - Fatal编程技术网

optionparser将数组传递给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! 这种方法要求我编写以下命令

我在向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!
这种方法要求我编写以下命令:

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
标志:)