gpt4 book ai didi

ruby - 有没有更好的方法来编写这种类型的 nil 检查?

转载 作者:太空宇宙 更新时间:2023-11-03 17:01:07 26 4
gpt4 key购买 nike

我的代码中有几个地方有嵌套对象,但不能保证它们总是被设置。

这可以给我 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com