2016-09-17 31 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