我有一个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
有关为何发生这种情况的任何想法?
答案 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