Ruby 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

我在搜索ARGV中传递了哪些选项时遇到了一些问题。我有

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解决了我的问题。我打字的速度比我想象的要快。