0

我有一个 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

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

4

1 回答 1

7

您缺少?操作员:

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 
于 2012-11-19T21:26:02.367 回答