У меня есть строка вроде:
@hsh.has_key?(foo) ? @hsh[foo][bar] : raise("custom error")
Что я бы лучше написал, как:
@hsh[foo][bar] || raise ("custom error")
Но вместо этого вызывается ошибка NoMethodError, когда @hsh [foo] не существует.
Чтобы сохранить исключение, вам нужно rescue, но его нет нигде в вашем коде. || просто реагирует на nil.
rescue
||
nil
Возможно, вы захотите:
@hsh.fetch(foo, {})[bar] || raise("custom error")
Я думаю, что это самое простое изменение:
@hsh[foo][bar] rescue raise ("custom error")
@hsh[foo] возвращает nil, у которого нет метода []. Попробуйте это:
@hsh[foo]
[]
@hsh[foo] && @hsh[foo][bar] || raise("custom error")
Желательно избегать инициирования исключений, если это возможно, но вы всегда можете создать встроенный блок, из которого вы можете спасти:
begin @hsh[foo][bar] rescue raise ("custom error") end