Ruby on rails If对象present put对象的更清晰语法

Ruby on rails If对象present put对象的更清晰语法,ruby-on-rails,ruby,Ruby On Rails,Ruby,下面的示例是否有更清晰的语法?显然,对于这个示例来说,这不是太大的问题,但是由于方法调用和数组是对象的一部分,理想情况下,我希望这个对象有一个超局部变量,即“this”或其他什么 obj?obj:'' 如果存在对象,则放置对象。否则什么也不放。通常的Ruby-ish方法是短路或: obj || '' 请记住,如果obj可能合法地为false,则此操作无法正常工作;在这种情况下,最好明确地针对obj.nil?进行测试 如果您需要发送大量的方法链,并且任何结果都可能是nil,请查看: 最后,如果您

下面的示例是否有更清晰的语法?显然,对于这个示例来说,这不是太大的问题,但是由于方法调用和数组是对象的一部分,理想情况下,我希望这个对象有一个超局部变量,即“this”或其他什么

obj?obj:''


如果存在对象,则放置对象。否则什么也不放。

通常的Ruby-ish方法是短路或:

obj || ''
请记住,如果
obj
可能合法地为
false
,则此操作无法正常工作;在这种情况下,最好明确地针对
obj.nil?
进行测试

如果您需要发送大量的方法链,并且任何结果都可能是
nil
,请查看:

最后,如果您使用的是Rails,ActiveSupport将为您提供:


令人惊叹的。是否有一种简单的方法可以返回
nil
,即使您正在检查子对象?也就是说,我有一个散列,我想写
obj['attr']|“
,但是如果我的
obj
为零,那么它会崩溃,而不是返回
语句。and和gem就是这样做的——它会让你写
obj.and['attr']|“
,例如,很酷。我去看看!还有
。试试已经在Rails中的
。还要注意的是
nil.to_s==''
所以如果
obj
是一个字符串,那么你可以只
obj.to_s
来隐藏条件。@muistooshort噢!正确的。我总是忘记那件事。
obj.andand.somemethod.andand.anothermethod || ''
obj.try(:somemethod).try(:anothermethod) || ''