Ruby成语要铲成字符串还是零? (例如铲子或分配/安全铲子)

问题描述 投票:1回答:2

我想这样做:

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中是否有一个“安全铲”或简单的“铲或分配”惯用语,特别是对于可能为零的字符串?

ruby string null assign
2个回答
2
投票

您可以使用类似的方法解决此问题;在||的帮助下。

summary = (summary || '') + reason

或者在||=<<的帮助下也是如此:

(summary ||= '') << reason

3
投票

我更喜欢@Oto Brglez的答案,但这启发了另一种可能对某人有用的解决方案:

summary = [summary, reason].join

这可能会或可能不会更容易阅读,并且可能性能较低。但是,它无需显式更改即可处理零汇总问题。

© www.soinside.com 2019 - 2024. All rights reserved.