ruby - 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 的字符串?
解决方案
我更喜欢@Oto Brglez 的回答,但它启发了另一个可能对某人有用的解决方案:
summary = [summary, reason].join
这可能更容易阅读,也可能不会更容易阅读,并且可能性能较差。但它在没有明确交替的情况下处理 nil 汇总问题。
推荐阅读
- python - 如何提取在 MNE 中绘制的脑电图蒙太奇的 xy 坐标?
- javascript - style.opacity 在 ajax 函数中不起作用
- r - 强制 .name_repair 创建名称
- swiftui - 将系统设置为始终使用圆角字体?
- javascript - 将日期格式从数字更改为字母
- html - 我的哈巴狗文件像压缩文件一样生成
- python - 从 PL 读取数据并在 Django 中显示绘图
- c# - 如何在 c# 中插入 linq 或 lambda 表达式?
- c++ - 标记为“virtual final”的基类方法是否会引入额外的开销?
- rust - 更新 BTreeSet 中的结构