我的代码中有几个地方有嵌套对象,但不能保证它们总是被设置。
这可以给我 nil:NilClass 的 ruby 未定义方法
puts obj1.obj2.obj3.obj4.to_s
这个检查很丑陋而且重复:
if(obj1 && obj1.obj2 && obj1.obj2.obj3 && obj1.obj2.obj3.obj4)
puts obj1.obj2.obj3.obj4.to_s
end
有没有一种简洁的写法,如果什么都为nil就静静地失败?
最佳答案
我的尝试版本:
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
那么代替这个长表达式:
obj1.try(:obj2).try(:obj3).try(:obj4).to_s
你可以这样做:
obj1.try{ obj2.obj3.obj4.to_s }
更新: 让它更干净一些
关于ruby - 有没有更好的方法来编写这种类型的 nil 检查?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9159032/