2016-09-17 90 views
0

这是我的代码:红宝石引发异常,如果ARGV是空的或零

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

你怎么能有一个'nil'第一个参数,第二个参数不'nil'? –

+0

我想提出一个异常,如果脚本运行没有参数 – Berlin

回答

3

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... 
+0

谢谢!!其作品! – Berlin

+0

'ARGV.length == 2 && ARGV.none?(&:empty?)'是有效参数*是否通过的条件。即有2个参数并且都不是空的。因此,在你的例子中,当参数是正确的时候会出现异常(与你想要的相反)。一种方法是使用'except'例如'引发RuntimeError,'参数的数量不正确',除非ARGV.length == 2 && ARGV.none?(&:empty?)' – mikej