为什么我不能在ruby的案例中使用三元运算符?

时间:2012-11-19 21:22:29

标签: ruby-on-rails ruby ruby-on-rails-3

我有一个case语句,我正在尝试使用三元运算符进行额外的条件检查。但它出错了。

这是代码示例

case url
when partner_x_url then Rails.env.development? ? partner_signup_url : partner_signup_url :protocol => "https"
.
.
.
else regular_signup_url
end

真正奇怪的是,如果使用以下

它是有效的
case url
when partner_x_url then if Rails.env.development?; partner_signup_url; else partner_signup_url :protocol => "https"; end
.
.
.
else regular_signup
end

有关为何发生这种情况的任何想法?

1 个答案:

答案 0 :(得分:6)

您错过了?运营商:

when partner_x_url then Rails.env.development? ? partner_signup_url : partner_signup_url :protocol => "https"

一直以一个以问号结尾的方法发生在我身上:)

编辑:由于您现在添加了该运算符,我怀疑它与运算符优先级有关。尝试避免在函数参数周围使用括号的那些问题:

when partner_x_url then Rails.env.development? ? partner_signup_url : partner_signup_url(:protocol => "https")

示例:如果没有函数括号,则会出现语法错误:

1.9.3p125 :006 > case @foo when true then true ? puts "foo" : puts "bar" end
SyntaxError: (irb):6: syntax error, unexpected tSTRING_BEG, expecting keyword_do or '{' or '('
case @foo when true then true ? puts "foo" : puts "bar" end
                                      ^                                                ^

使用括号,您不会:

1.9.3p125 :007 > case @foo when true then true ? puts("foo") : puts("bar") end
 => nil