我的代码中有几个地方有嵌套对象,但不能保证它们总是被设置.
这可以给我一个nil的红宝石未定义方法:NilClass
puts obj1.obj2.obj3.obj4.to_s
Run Code Online (Sandbox Code Playgroud)
这项检查是丑陋和重复的:
if(obj1 && obj1.obj2 && obj1.obj2.obj3 && obj1.obj2.obj3.obj4)
puts obj1.obj2.obj3.obj4.to_s
end
Run Code Online (Sandbox Code Playgroud)
是否有一种简洁的写作方式,如果有什么是零只是默默地失败?
我试试的版本:
class Object
def try(*args, &block)
if args.empty? and block_given?
begin
instance_eval &block
rescue NameError => e
puts e.message + ' ' + e.backtrace.first
end
elsif respond_to?(args.first)
send(*args, &block)
end
end
end
Run Code Online (Sandbox Code Playgroud)
那么,而不是这个长表达式:
obj1.try(:obj2).try(:obj3).try(:obj4).to_s
Run Code Online (Sandbox Code Playgroud)
你可以这样做:
obj1.try{ obj2.obj3.obj4.to_s }
Run Code Online (Sandbox Code Playgroud)
更新: 让它更清洁一点
| 归档时间: |
|
| 查看次数: |
174 次 |
| 最近记录: |