在Ruby代码中使用空格(三元运算符)

时间:2013-05-12 19:42:17

标签: ruby whitespace ternary-operator

考虑这段代码:

values = ["one", "two", "", "four"]

values.each do |value|
puts value.empty? ? "emptyness" : "#{value} is #{value.length}"
end

是否可以在Ruby 1.8.7中格式化三元运算符缩进操作数?类似的东西:

puts value.empty?
    ? "emptyness" 
    : "#{value} is #{value.length}"

但这显然不起作用。

3 个答案:

答案 0 :(得分:6)

使用Ruby本身无需转义的方法是让Ruby知道它正在等待更多信息

puts value.empty?  ?
  "emptyness" :
  "#{value} is #{value.length}"

原因是Ruby看到了三元组的部分,并且知道需要更多的东西才能完成语句。

在OP的代码中使用括号不起作用,语句仍然是部分的,Ruby不知道如何处理?并且:在下一行。

当然,你真的不需要三元:

values = ["one", "two", "", "four"]

values.each do |value|
  puts value.empty? && "emptyness" ||
    "#{value} is #{value.length}"
end

答案 1 :(得分:4)

您可以使用字符\将命令拆分为换行符。

这将有效:

values = ["one", "two", "", "four"]

values.each do |value|
   puts value.empty? \
     ? "emptyness" \
     : "#{value} is #{value.length}"
end

此外,\字符后不能有任何空格,否则会引发语法错误。

答案 2 :(得分:2)

当三元运算符需要分成多行时,可能需要使用 if

puts if value.empty?
       "emptyness"
     else
       "#{value} is #{value.length}"
     end

这是有效的,因为 if 和Ruby中的任何其他表达式一样,都有结果。该结果是 then else 部分的结果,无论哪个执行(如果条件为false且没有 else 部分,然后是的结果,如果是零)。