如果ARGV为空或为零,则Ruby引发异常

时间:2016-09-17 13:44:19

标签: ruby

这是我的代码:

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

我该怎么做?

感谢。

1 个答案:

答案 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...