ruby三元运算符语法 - 运算符之间的间距

时间:2014-04-14 09:00:54

标签: ruby syntax ternary

以下行是否有正确的ruby语法?

session[:id]?'foo':'bar'

(请注意,运营商之间没有间距)

这一行适用于我尝试的所有红宝石(> 1.8.7),但我知道可能存在误解,因为?可以是方法标识符的一部分。

不在三元运算符周围放置空格是不是语法错误?

2 个答案:

答案 0 :(得分:2)

我认为当选择器是索引哈希时,三元运算符的正确形式,因为char组合]?对于同一运算符无效:

session[:id]?'foo':'bar'
session[:id] ? 'foo' : 'bar'
session[:id]? 'foo' : 'bar'

但是如果在只是方法问号之后省略了空格,则会引发语法错误:

session?'foo':'bar'
          ^
SyntaxError: unexpected ':', expecting $end
session? 'foo':'bar'
           ^
SyntaxError: unexpected ':', expecting $end

答案 1 :(得分:0)

如果方法标识符包含?,则需要额外的问号。

> array_variable.include?('itemA') ? 'yes' : 'no'
>= "yes"

> array_variable.empty? ? 'yes' : 'no'
=> "no"

> array_variable.empty? 'yes' : 'no'
  SyntaxError: (irb):10: syntax error, unexpected ':', expecting end-of-input