我有一句话:
@hsh.has_key?(foo) ? @hsh[foo][bar] : raise("custom error")
我宁愿写得像:
@hsh[foo][bar] || raise ("custom error")
但是当@hsh [foo]不存在时,会调用NoMethodError。
答案 0 :(得分:2)
要保存例外,您需要rescue
,但在代码中没有任何地方。 ||
只会对nil
做出反应。
你可能想要这个:
@hsh.fetch(foo, {})[bar] || raise("custom error")
答案 1 :(得分:1)
我认为这是最简单的改变:
@hsh[foo][bar] rescue raise ("custom error")
答案 2 :(得分:0)
如果可能的话,最好避免触发异常,但是你总是可以创建一个你可以解雇的内联块:
begin
@hsh[foo][bar]
rescue
raise ("custom error")
end
答案 3 :(得分:0)
@hsh[foo]
返回nil
,其中没有[]
方法。试试这个:
@hsh[foo] && @hsh[foo][bar] || raise("custom error")