我想这样做:
summary << reason
在我的情况下,summary
是一个字符串,包含几个句子,reason
是一个这样的句子。
如果目标已经有一个值,这很好用,但是有时summary
可以是nil
。在这种情况下,将引发:
NoMethodError: undefined method `<<' for nil:NilClass
所以,我可以这样写:
if summary
summary << reason
else
summary = reason
end
这既麻烦又丑陋。我可以用append(summary, reason)
这样的新方法将其隐藏起来,但是我希望有一个红宝石成语可以将其简洁地包装起来。
我乐观地尝试了几种变体,但没有成功:
summary += reason
summary &<< reason
在其他情况下,我可能会建立一系列原因(您可以将原因铲成一个空数组,然后将其最终汇总成一个摘要...但是在我当前的项目中不可行。
我也不能用空字符串作为摘要的种子(插入空字符串也可以,因为其他代码有时取决于它是否为零。
因此,在Ruby中是否有一个“安全铲”或简单的“铲或分配”惯用语,特别是对于可能为零的字符串?
您可以使用类似的方法解决此问题;在||
的帮助下。
summary = (summary || '') + reason
或者在||=
和<<
的帮助下也是如此:
(summary ||= '') << reason
我更喜欢@Oto Brglez的答案,但这启发了另一种可能对某人有用的解决方案:
summary = [summary, reason].join
这可能会或可能不会更容易阅读,并且可能性能较低。但是,它无需显式更改即可处理零汇总问题。