我有這樣一句臺詞:是否可以覆蓋例外?
@hsh.has_key?(foo) ? @hsh[foo][bar] : raise("custom error")
那我寧願寫,如:
@hsh[foo][bar] || raise ("custom error")
但當@hsh [富]不存在NoMethodError被稱爲替代。
我有這樣一句臺詞:是否可以覆蓋例外?
@hsh.has_key?(foo) ? @hsh[foo][bar] : raise("custom error")
那我寧願寫,如:
@hsh[foo][bar] || raise ("custom error")
但當@hsh [富]不存在NoMethodError被稱爲替代。
要保存例外情況,您需要rescue
,但您的代碼中沒有任何地方。 ||
僅對nil
作出反應。
您可能希望這樣:
@hsh.fetch(foo, {})[bar] || raise("custom error")
它的首選,以避免如果在所有可能引發的異常,但你總是可以創建一個內聯塊,你可以拯救出來:
begin
@hsh[foo][bar]
rescue
raise ("custom error")
end
@hsh[foo]
返回nil
,它沒有[]
方法。試試這個:
@hsh[foo] && @hsh[foo][bar] || raise("custom error")
我覺得這是最簡單的變化:
@hsh[foo][bar] rescue raise ("custom error")
當printf的調試,我經常有'養 「找不到#{} bar.inspect」',甚至'raise「在#{@ hsh.fetch(foo).keys.inspect}」中找不到#{bar.inspect}「。 – 2011-05-09 23:46:03