我想在ruby中做这样的事情:
safe_variable = begin
potentially_nil_variable.foo
rescue
some_other_safe_value
end
...并将异常块(begin / rescue / end)视为函数/块。这不是书面形式的,但有没有办法得到类似的结果?
注意我实际上在做的是这个,但有效但IMO难看:
begin
safe_variable = potentially_nil_variable.foo
rescue
safe_variable = some_other_safe_value
end
更新
我想我在ruby语法上遇到了一个问题。我实际上在做的是:
object_safe = begin potentially_nil_variable.foo
rescue ""
end
错误为class or module required for rescue clause
。可能它认为""
应该是异常结果的占位符。
答案 0 :(得分:6)
您的表格应该有效:
safe_variable = begin
potentially_nil_variable.foo
rescue
some_other_safe_value
end
简短形式:
safe_variable = this_might_raise rescue some_other_safe_value
如果您只是避开nil
,则可以查看ActiveRecord的try
:
safe_variable = potentially_nil_variable.try(:foo) || some_other_safe_value
答案 1 :(得分:0)
我知道用于向可能为nil的对象发送消息的最有用的方法类似于andand。对于nil,andand
返回一个对象,无论您发送什么消息,该对象都将返回nil。对于其他对象,它返回原始对象。而且几乎任何事情都会比通过例外处理更有效率。