以下行是否有正确的ruby语法?
session[:id]?'foo':'bar'
(请注意,运营商之间没有间距)
这一行适用于我尝试的所有红宝石(> 1.8.7),但我知道可能存在误解,因为?
可以是方法标识符的一部分。
不在三元运算符周围放置空格是不是语法错误?
答案 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