Réponses:
Retirer ifdeif @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 thenpartie d'une ifexpression doivent être séparées soit par un séparateur d'expression (c'est ;-à- dire ou une nouvelle ligne), soit par le thenmot - 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, ifest 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 ifune fonction en C, vous avez besoin d'un opérateur.
En Ruby, cependant, ifest 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.riggedpour éviter le!
nilau lieu de 'Yes'if item.riggedest vrai. Une seule ligne si ou à moins que les instructions retournent nilsi 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'