解决方法
这在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