Si votre condition se termine par un '?' est-il possible de le laisser tomber? Ie si la condition est @ customer.sales.present? pouvez-vous laisser tomber le «?»? ... ne vous inquiétez pas. J'ai trouvé du code et je l'ai testé. La réponse est `` non ''
Jay Killeen
@JayKilleen Vous avez raison. Ruby est une question de trucs intelligents, mais c'est aussi intelligent (:
Nikita Rybak
1
@NikitaRybak s/that/not that :)
Austin
180
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é.
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.
Cette solution est différente en ce qu'elle retourne 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.
Chien C'est la meilleure réponse - j'aime la façon dont il contraste succinctement entre les trois manières. Merci!
MrVocabulary
7
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"
Réponses:
Retirer
if
deif @item.rigged ? "Yes" : "No"
L'opérateur ternaire a la forme
condition ? if_true : if_false
la source
s/that/not that
:)Dans Ruby, la condition et la
then
partie d'uneif
expression doivent être séparées soit par un séparateur d'expression (c'est;
-à- dire ou une nouvelle ligne), soit par lethen
mot - clé.Donc, tout cela fonctionnerait:
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éerif
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:
Cela montre un autre problème avec l'utilisation de l'opérateur conditionnel dans Ruby:
C'est tout simplement difficile à lire avec les multiples points d'interrogation qui se rapprochent les uns des autres.
la source
Une ligne si:
Ton cas:
la source
"No" unless @item.rigged
pour éviter le!
nil
au lieu de'Yes'
ifitem.rigged
est vrai. Une seule ligne si ou à moins que les instructions retournentnil
si la condition n'est pas remplie.De ce que je sais
3 monoplaces
a = 10 if <condition>
exemple:
a = 10 unless <condition>
exemple:
a = <condition> ? <a> : <b>
exemple:
J'espère que cela aide.
la source
Les constructions à une ligne shell et C fonctionnent toutes les deux (ruby 1.9.3p429):
la source
sinon, la condition peut être couverte par l'opérateur ternaire
la source
Pour plus de simplicité, si vous devez utiliser par défaut une valeur nulle, vous pouvez utiliser:
la source
Vous pouvez utiliser ----
(@ item.rigged)? "Oui Non"
Si @ item.rigged est vrai, il renverra 'Oui' sinon il renverra 'Non'
la source