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时尝试访问该属性。
戴夫