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

lui*_*gal 0 ruby ruby-on-rails 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
Run Code Online (Sandbox Code Playgroud)

真正奇怪的是,如果使用以下内容,它可以工作

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
Run Code Online (Sandbox Code Playgroud)

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

Thi*_*ilo 6

你错过了?运营商:

when partner_x_url then Rails.env.development? ? partner_signup_url : partner_signup_url :protocol => "https"
Run Code Online (Sandbox Code Playgroud)

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

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

when partner_x_url then Rails.env.development? ? partner_signup_url : partner_signup_url(:protocol => "https")
Run Code Online (Sandbox Code Playgroud)

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

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
                                      ^                                                ^
Run Code Online (Sandbox Code Playgroud)

使用括号,您不需要:

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