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

Ber*_*lin 1 ruby

这是我的代码:

region = ARGV[0]
instance_name = ARGV[1]
Run Code Online (Sandbox Code Playgroud)

这样它的作用:

raise RuntimeError, 'empty argument' if ARGV[0].nil?
raise RuntimeError, 'empty argument' if ARGV[1].nil?
Run Code Online (Sandbox Code Playgroud)

这样它不起作用:

我尝试了所有这些

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
Run Code Online (Sandbox Code Playgroud)

我该怎么办?

谢谢.

mik*_*kej 6

raise RuntimeError, 'empty argument' if ARGV[0].nil?是因为尝试访问不存在的Ruby数组中的任何索引将返回nil.

ARGV[123213] #=> nil
Run Code Online (Sandbox Code Playgroud)

ARGV.each将尝试循环遍历内容,ARGV但如果ARGV为空,则块的内容将永远不会被执行,因此if实际上不会运行任何条件.

如果要检查是否提供了2个参数,可以检查长度ARGV.length == 2.

从技术上讲,可能是为其中一个参数传递了一个空字符串.例如,如果脚本是使用运行的

ruby myscript.rb ""
Run Code Online (Sandbox Code Playgroud)

所以你可以检查一下

if ARGV.length == 2 && ARGV.none?(&:empty?)
  # 2 arguments provided...
Run Code Online (Sandbox Code Playgroud)