Risposte:
Rimuovi ifdaif @item.rigged ? "Yes" : "No"
L'operatore ternario ha forma condition ? if_true : if_false
s/that/not that :)
In Ruby, la condizione e la thenparte di ifun'espressione devono essere separate da un separatore di espressioni (ovvero da ;una nuova riga) o dalla thenparola 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 ifuna 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.riggedper prevenire il!
nilinvece che 'Yes'se item.riggedè vera. Se vengono restituite le istruzioni a riga singola se o meno nilse 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'