首页 > 解决方案 > Ruby成语铲成一个字符串或零?(例如铲子或分配/安全铲子)

问题描述

我想这样做:

summary << reason

在我的例子中,summary是一个字符串,包含几个句子,并且reason是一个这样的句子。

如果目标已经有一个值,这很好用,但有时summary可以是nil. 在这种情况下,这会引发:

NoMethodError: undefined method `<<' for nil:NilClass

所以,我可以写这样的东西:

if summary 
  summary << reason
else 
  summary = reason
end

这既麻烦又丑陋。我可以用一种新的方法来隐藏它,比如append(summary, reason),但我希望有一个 ruby​​ 成语可以简明扼要地把它包起来。

我乐观地尝试了一些变体,但没有成功:

summary += reason
summary &<< reason

在其他情况下,我可能会构建一系列原因(您可以将它们铲入一个空数组就好了),然后最终将它们加入一个摘要......但这在我当前的项目中是不可行的。

我也不能用空字符串作为摘要的种子(铲入空字符串也可以正常工作),因为其他代码有时取决于它为零。

那么,Ruby 中是否存在“安全铲子”或简单的“铲子或分配”习语,尤其是对于可能为 nil 的字符串?

标签: rubystringnullassign

解决方案


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

summary = [summary, reason].join

这可能更容易阅读,也可能不会更容易阅读,并且可能性能较差。但它在没有明确交替的情况下处理 nil 汇总问题。


推荐阅读