这是我的代码:
if ARGV[0] == false
puts "Usage: ./script.rb argument"
exit
end
print "Yey we got an argument: " ARGV[0]
但我不能让代码检查是否给出了ARGV [0],我应该怎么做?
答案 0 :(得分:31)
答案 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]
将返回nil
,nil == 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