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 に答える