这是我的代码:
region = ARGV[0]
instance_name = ARGV[1]
这种方式起作用:
raise RuntimeError, 'empty argument' if ARGV[0].nil?
raise RuntimeError, 'empty argument' if ARGV[1].nil?
这种方式不起作用:
我尝试了所有这些
ARGV.each do |a|
raise RuntimeError, 'empty argument' if "#{a}".nil?
raise RuntimeError, 'empty argument' if a.nil?
raise RuntimeError, 'empty argument' if "#{a}".empty?
raise RuntimeError, 'empty argument' if a.empty?
end
我该怎么做?
感谢。
答案 0 :(得分:5)
raise RuntimeError, 'empty argument' if ARGV[0].nil?
有效,因为尝试访问不存在的Ruby数组中的任何索引将返回nil
。
ARGV[123213] #=> nil
ARGV.each
将尝试循环ARGV
的内容,但如果ARGV
为空,则该块的内容将永远不会执行,因此您的if
条件都不会实际上是在运行。
如果要检查是否提供了2个参数,可以检查长度ARGV.length == 2
。
技术上可能是为其中一个参数传递了一个空字符串。例如,如果使用
运行脚本ruby myscript.rb ""
所以你可以检查
if ARGV.length == 2 && ARGV.none?(&:empty?)
# 2 arguments provided...