Ruby成语铲成字符串还是nil? (例如铲子或指定/安全铲子)
Ruby idiom to shovel into a string or nil? (e.g. shovel or assign / safe shovel)
我想这样做:
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
在其他情况下,我可能会构建一个原因数组(你可以将其放入一个空数组中就好),然后最后将它们加入一个摘要中......但这在我当前的项目中是不可行的。
我也不能用空字符串作为摘要的种子(铲入空字符串也可以正常工作),因为其他代码有时依赖于它为 nil。
那么,Ruby 中是否有 "safe shovel" 或简单的 "shovel or assign" 成语,特别是对于可能为 nil 的字符串?
你可以用这样的方法解决这个问题;在 ||
.
的帮助下
summary = (summary || '') + reason
或者在 ||=
和 <<
的帮助下这样做:
(summary ||= '') << reason
我更喜欢@Oto Brglez 的回答,但它启发了另一个可能对某人有用的解决方案:
summary = [summary, reason].join
这可能更容易阅读,也可能不会更容易阅读,而且性能可能较低。但它在没有明确交替的情况下处理了 nil 摘要问题。
我想这样做:
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
在其他情况下,我可能会构建一个原因数组(你可以将其放入一个空数组中就好),然后最后将它们加入一个摘要中......但这在我当前的项目中是不可行的。
我也不能用空字符串作为摘要的种子(铲入空字符串也可以正常工作),因为其他代码有时依赖于它为 nil。
那么,Ruby 中是否有 "safe shovel" 或简单的 "shovel or assign" 成语,特别是对于可能为 nil 的字符串?
你可以用这样的方法解决这个问题;在 ||
.
summary = (summary || '') + reason
或者在 ||=
和 <<
的帮助下这样做:
(summary ||= '') << reason
我更喜欢@Oto Brglez 的回答,但它启发了另一个可能对某人有用的解决方案:
summary = [summary, reason].join
这可能更容易阅读,也可能不会更容易阅读,而且性能可能较低。但它在没有明确交替的情况下处理了 nil 摘要问题。