Ruby字符串拼接和三元运算符不兼容?

7
在下面的代码中,第三行出现错误: TypeError: 无法将false转换为字符串。
line = "some default text"
line << " some more text" unless more.empty?
line << (even_more.empty?) ? " done." : " and even more text"

什么是更好的方法来做这件事?
1个回答

20

这些括号是必需的,因为<<的优先级高于? (优先级表)。解决方案:

line << (even_more.empty? ? " done." : " and even more text")

顺便提一下,注意你可以在构建数组时采用函数式方法:

line = [
  "some default text",
  ("some more text" unless more.empty?),
  even_more.empty? ? "done." : "and even more text",
].compact.join(" ")

6
可以补充说明的是,问题的原因在于“<<”运算符比三元运算符“?:”有更高的优先级...因此需要使用括号。 - Romain
1
括号是你的朋友,而不是敌人 :) - Tilo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接