Réponses:
Retirer if
deif @item.rigged ? "Yes" : "No"
L'opérateur ternaire a la forme condition ? if_true : if_false
s/that/not that
:)
Dans Ruby, la condition et la then
partie d'une if
expression doivent être séparées soit par un séparateur d'expression (c'est ;
-à- dire ou une nouvelle ligne), soit par le then
mot - clé.
Donc, tout cela fonctionnerait:
if @item.rigged then 'Yes' else 'No' end
if @item.rigged; 'Yes' else 'No' end
if @item.rigged
'Yes' else 'No' end
Il existe également un opérateur conditionnel dans Ruby, mais c'est totalement inutile. L'opérateur conditionnel est nécessaire en C, car c'est un opérateur: en C, if
est une instruction et ne peut donc pas renvoyer de valeur, donc si vous voulez renvoyer une valeur, vous devez utiliser quelque chose qui peut renvoyer une valeur. Et les seules choses en C qui peuvent renvoyer une valeur sont les fonctions et les opérateurs, et comme il est impossible de créer if
une fonction en C, vous avez besoin d'un opérateur.
En Ruby, cependant, if
est une expression. En fait, tout est une expression dans Ruby, donc il peut déjà renvoyer une valeur. Il n'est même pas nécessaire que l'opérateur conditionnel existe , encore moins de l'utiliser.
BTW: il est habituel de nommer les méthodes utilisées pour poser une question avec un point d'interrogation à la fin, comme ceci:
@item.rigged?
Cela montre un autre problème avec l'utilisation de l'opérateur conditionnel dans Ruby:
@item.rigged? ? 'Yes' : 'No'
C'est tout simplement difficile à lire avec les multiples points d'interrogation qui se rapprochent les uns des autres.
Une ligne si:
<statement> if <condition>
Ton cas:
"Yes" if @item.rigged
"No" if !@item.rigged # or: "No" unless @item.rigged
"No" unless @item.rigged
pour éviter le!
nil
au lieu de 'Yes'
if item.rigged
est vrai. Une seule ligne si ou à moins que les instructions retournent nil
si la condition n'est pas remplie.
De ce que je sais
3 monoplaces
a = 10 if <condition>
exemple:
a = 10 if true # a = 10
b = 10 if false # b = nil
a = 10 unless <condition>
exemple:
a = 10 unless false # a = 10
b = 10 unless true # b = nil
a = <condition> ? <a> : <b>
exemple:
a = true ? 10 : 100 # a = 10
a = false ? 10 : 100 # a = 100
J'espère que cela aide.
Les constructions à une ligne shell et C fonctionnent toutes les deux (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"
sinon, la condition peut être couverte par l'opérateur ternaire
@item.rigged? ? 'Yes' : 'No'
Vous pouvez utiliser ----
(@ item.rigged)? "Oui Non"
Si @ item.rigged est vrai, il renverra 'Oui' sinon il renverra 'Non'