ruby中groovy的链式属性是否有等效的空值预防?

Groovy的:

如果有my_object – >访问’name’并大写

my_object?.name?.capitalize() 

ruby的等价物是什么,以避免nil对象使用此工具访问属性?

谢谢

这适用于Rails:

 my_object.try(:name).try(:capitalize) 

如果你想在Ruby中工作,你必须像这样扩展Object

 class Object ## # @person ? @person.name : nil # vs # @person.try(:name) def try(method) send method if respond_to? method end end 

资源

在Rails中,它实现如下:

 class Object def try(*a, &b) if a.empty? && block_given? yield self else __send__(*a, &b) end end end class NilClass def try(*args) nil end end 

andand gem提供此function。

 my_object.andand.name.andand.capitalize() 

假设你的意思是你想要避免nil错误,如果my_object为零。 试试:

 my_object?.name?.capitalize() unless my_object.nil? 

Ruby将首先执行nil检查,然后在my_object不为null时尝试访问该属性。

戴夫