Risposte:
Rimuovi if
daif @item.rigged ? "Yes" : "No"
L'operatore ternario ha forma condition ? if_true : if_false
s/that/not that
:)
In Ruby, la condizione e la then
parte di if
un'espressione devono essere separate da un separatore di espressioni (ovvero da ;
una nuova riga) o dalla then
parola chiave.
Quindi, tutti questi funzionerebbero:
if @item.rigged then 'Yes' else 'No' end
if @item.rigged; 'Yes' else 'No' end
if @item.rigged
'Yes' else 'No' end
C'è anche un operatore condizionale in Ruby, ma è del tutto inutile. L'operatore condizionale è necessario in C, perché è un operatore: in C if
è un'istruzione e quindi non può restituire un valore, quindi se si desidera restituire un valore, è necessario utilizzare qualcosa che può restituire un valore. E le uniche cose in C che possono restituire un valore sono funzioni e operatori, e poiché è impossibile eseguire if
una funzione in C, è necessario un operatore.
In Ruby, tuttavia, if
è un'espressione. In realtà, tutto è un'espressione in Ruby, quindi può già restituire un valore. Non è necessario che l'operatore condizionale esista , per non parlare dell'uso.
A proposito: è consuetudine nominare metodi che vengono utilizzati per porre una domanda con un punto interrogativo alla fine, in questo modo:
@item.rigged?
Questo mostra un altro problema con l'utilizzo dell'operatore condizionale in Ruby:
@item.rigged? ? 'Yes' : 'No'
È semplicemente difficile leggere con i molteplici punti interrogativi vicini l'uno all'altro.
Una riga se:
<statement> if <condition>
Il tuo caso:
"Yes" if @item.rigged
"No" if !@item.rigged # or: "No" unless @item.rigged
"No" unless @item.rigged
per prevenire il!
nil
invece che 'Yes'
se item.rigged
è vera. Se vengono restituite le istruzioni a riga singola se o meno nil
se la condizione non è soddisfatta.
Da quello che so
3 one-liner
a = 10 if <condition>
esempio:
a = 10 if true # a = 10
b = 10 if false # b = nil
a = 10 unless <condition>
esempio:
a = 10 unless false # a = 10
b = 10 unless true # b = nil
a = <condition> ? <a> : <b>
esempio:
a = true ? 10 : 100 # a = 10
a = false ? 10 : 100 # a = 100
Spero possa essere d'aiuto.
Entrambi i costrutti a una linea di shell e C funzionano (ruby 1.9.3p429):
# Shell format
irb(main):022:0> true && "Yes" || "No"
=> "Yes"
irb(main):023:0> false && "Yes" || "No"
=> "No"
# C format
irb(main):024:0> true ? "Yes" : "No"
=> "Yes"
irb(main):025:0> false ? "Yes" : "No"
=> "No"
se altrimenti la condizione può essere coperta con l'operatore ternario
@item.rigged? ? 'Yes' : 'No'
Puoi usare ----
(@ item.rigged)? "Si No"
Se @ item.rigged è vero, restituirà 'Sì' altrimenti restituirà 'No'