2011-05-09 131 views
1

我有這樣一句臺詞:是否可以覆蓋例外?

@hsh.has_key?(foo) ? @hsh[foo][bar] : raise("custom error") 

那我寧願寫,如:

@hsh[foo][bar] || raise ("custom error") 

但當@hsh [富]不存在NoMethodError被稱爲替代。

回答

2

要保存例外情況,您需要rescue,但您的代碼中沒有任何地方。 ||僅對nil作出反應。

您可能希望這樣:

@hsh.fetch(foo, {})[bar] || raise("custom error") 
+1

當printf的調試,我經常有'養 「找不到#{} bar.inspect」',甚至'raise「在#{@ hsh.fetch(foo).keys.inspect}」中找不到#{bar.inspect}「。 – 2011-05-09 23:46:03

0

它的首選,以避免如果在所有可能引發的異常,但你總是可以創建一個內聯塊,你可以拯救出來:

begin 
    @hsh[foo][bar] 
rescue 
    raise ("custom error") 
end 
0

@hsh[foo]返回nil,它沒有[]方法。試試這個:

@hsh[foo] && @hsh[foo][bar] || raise("custom error") 
1

我覺得這是最簡單的變化:

@hsh[foo][bar] rescue raise ("custom error") 
相關問題