Ruby ARGV数组搜索
我在搜索ARGV中传递了哪些选项时遇到了一些问题。我有Ruby ARGV数组搜索,ruby,argv,Ruby,Argv,我在搜索ARGV中传递了哪些选项时遇到了一些问题。我有 if ARGV.include? '-v' == true puts "Do junk" else puts "Nope" end 这似乎是一件非常简单的事情,但当我放置-v或不放置-v时,我总是得不到。我是不是遗漏了一些简单的东西?我不知道这是不是你的问题,但你不需要==真的 该方法返回true或false。这是一个优先级问题。写为 if ARGV.include?('-v') == true puts "Do ju
if ARGV.include? '-v' == true
puts "Do junk"
else
puts "Nope"
end
这似乎是一件非常简单的事情,但当我放置-v或不放置-v时,我总是得不到。我是不是遗漏了一些简单的东西?我不知道这是不是你的问题,但你不需要==真的
该方法返回true或false。这是一个优先级问题。写为
if ARGV.include?('-v') == true
puts "Do junk"
else
puts "Nope"
end
在您的情况下,如果ARGV.include?”-v'==true已被解释为ARGV.include?
'-v'==真。现在'-v'==true返回false,并且false不包括在ARGV数组中,所以if的计算结果为false,否则将执行该部分
最好写成
if ARGV.include? '-v'
puts "Do junk"
else
puts "Nope"
end
因为ARGV是一个数组,如果在数组中找到ob,则返回true。为什么要在ARGV中搜索选项?使用标准库的类,它是为此而创建的
require 'optparse'
require 'pp'
options = {}
OptionParser.new { |opt|
opt.on('-v', '--verbose', 'Be verbose') { |o| options[:verbose] = o }
}.parse!
pp options
保存它,并使用类似于:ruby test.rb-v或ruby test.rb-verbose的命令运行它,您将看到:
{:verbose=>true}
Usage: test [options]
-v, --verbose Be verbose
使用ruby test.rb-h或ruby test.rb-help运行它,您将看到:
{:verbose=>true}
Usage: test [options]
-v, --verbose Be verbose
OptionParser有各种各样漂亮而智能的技巧,用于设置布尔值、所需参数、强制值,以便您可以获取作为数组返回的参数的多个值,等等。请注意,它为我创建了帮助,包括使用-h或-help作为标志
查看文档中的示例,了解它可以做什么的其他想法。到目前为止,所有其他答案都是正确的,因为这是一个优先问题 以下是一些有用的注释,其中第一个已经提到: 您不需要==true,因为include?方法已返回true或false 对于解析命令行参数,您可能会发现使用类似的库更直观。使用Trollop,您的示例可以如下所示:
require 'trollop'
opts = Trollop::options do
opt :verbose, "Run verbosely" # (-v is created automatically from this)
end
if opts[:v]
puts "yes"
else
puts "no"
end
编辑:另请参见铁皮人的回答re:optpasse如何运行.rb文件?我想可能它首先计算'v'==true,这会产生false。那么,ARGV.include?false也会产生false,因此它会执行else。@DaniëlKnippers您的回答完全正确。.Arup:我通过输入ruby选项来运行,这些选项也可以出现在文件名之前,我正在对所有这些进行排序。我的问题是我指定了真实的。我相信我有一个这样的早晨…你为什么要在ARGV上寻找选择?不要重新发明轮子,而是使用标准库的类,它是为此而设计的。这实际上解决了问题。尽管其他一些答案也很有帮助。谢谢你,德普。删除==true解决了我的问题。我打字的速度比我想象的要快。