Ruby IF没有给出ARGV

时间:2013-01-30 17:14:34

标签: ruby

这是我的代码:

if ARGV[0] == false
    puts "Usage: ./script.rb argument"
    exit
end
print "Yey we got an argument: " ARGV[0]

但我不能让代码检查是否给出了ARGV [0],我应该怎么做?

7 个答案:

答案 0 :(得分:31)

检查它是empty?(或检查其长度):

if ARGV.empty?
  puts ...
  exit
end

考虑使用任何Ruby命令行参数解析器,例如OptionParser

答案 1 :(得分:8)

处理位置参数的最简单方法(除了使用gem来执行此操作)是shift关闭它们,一次一个:

arg1 = ARGV.shift
arg2 = ARGV.shift

缺少参数将为零。让我们利用它来给arg2一个默认值:

arg1 = ARGV.shift
arg2 = ARGV.shift || 'default value goes here'

检查所需的参数是微不足道的:

raise "missing argument" unless arg1

也很容易看出是否提供了太多的参数:

raise "too many arguments" unless ARGV.empty?

答案 2 :(得分:4)

我意识到已经给出了一个很好的解决方案,但是没有人提到你的例子无效的真正原因。

您的示例代码的问题是,如果没有给出参数,ARGV[0]将返回nilnil == false为false。 nil是“假的”,但不等于假。你可以做的是:

unless ARGV[0]
  puts "Usage: ..."
  exit 1
end

哪个会起作用,因为这个陈述现在取决于虚假,而不是与实际false的平等。

但是不要使用这个代码,如果你陈述你的实际意图就更清楚了,你想知道是否有任何参数(而不是第一个参数是否是假的)。因此,请使用其他人建议的代码:

if ARGV.empty?
  puts "Usage..."
  exit 1
end

答案 3 :(得分:1)

检查是否给出了ARGV [0](或更多args):

puts 'Usage: ...' if ARGV.length == 0

您还可以使用ARGV.empty吗? (@ DaveNewton的回答)

答案 4 :(得分:0)

您可以查看ARGV的长度。如果它没有元素,则没有给出ARGV[0]

答案 5 :(得分:0)

我这样做是在工作:

.fit()

答案 6 :(得分:-2)

这就是我的所作所为:

a = 'defaultvalue' if (a = ARGV.shift).nil?

其他人建议:

a = ARGV.shift || 'defaultvalue'

这是错误的,因为任何错误值都会导致defaultvalue被分配,例如:

args=[false]; a=args.shift||true; # a has final value true when it should be false