我正在编写一个需要参数才能运行的程序,其中一个可能的参数是通过传递程序-f <file>
来使用文件的选项。我不知道这出错的地方,我试图将文件读作ARGV[1]
,因为它是给予该程序的第二个参数。
但是,调用ARGV[1]
什么都不输出,但是如果我在标志和文件名的基础上再添加两个参数,然后调用ARGV[1]
它会输出给定为1的最后一个参数?例如:
ruby testparse.rb -f test.txt
#<= Nothing there
但如果我这样做了:
ruby testparse.rb -f test.txt test ttest
#<= ttest
将ARGV[1]
放在ARGV[3]
的位置?所以我的问题是:
ARGV[1]
?来源:
require 'optparse'
options = {}
OptionParser.new do |opt|
opt.on('-f=FILE', '--file=FILE', 'File it') { |o| options[:file] = o }
end.parse!
if ARGV[1].nil?
puts "Nothing there"
else
puts ARGV[1]
end
答案 0 :(得分:0)
当您致电parse!
来解析命令行选项时,OptionParser将从ARGV
中删除它识别的任何内容,并保留任何无法识别的内容供您处理。
在您的情况下,由于您已指定-f
选项来获取一个参数,因此这两个条目将从ARGV
中删除。在您的代码中,您将该选项存储在options[:file]
中,因此请检查该选项而不是ARGV[1]
。