/ / Perché non posso usare l'operatore ternario all'interno di una custodia in rubino? [chiuso] - ruby-on-rails, ruby, ruby-on-rail-3

Perché non posso usare l'operatore ternario all'interno di una custodia in rubino? [chiuso] - ruby-on-rails, ruby, ruby-on-rail-3

Ho una dichiarazione del caso e sto cercando di usare l'operatore ternario per fare ulteriori controlli condizionali. Ma si sbaglia.

ecco un esempio del codice

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

La cosa veramente strana è che funziona se si usa quanto segue

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

Qualche idea sul perché questo sta accadendo?

risposte:

6 per risposta № 1

Ti stai perdendo il ? operatore:

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

Mi succede tutto il tempo con un metodo che termina con un punto interrogativo :)

MODIFICARE: Dato che ora hai aggiunto quell'operatore, sospetto che abbia a che fare con la precedenza degli operatori. Cerca di evitare questo tipo di problemi usando le parentesi attorno agli argomenti della funzione:

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

Esempio: senza parentesi di funzione, si ottiene un errore di sintassi:

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
^                                                ^

Con parentesi, non ti piace:

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