Wenn Ihre Bedingung mit einem '?' ist es möglich, es fallen zu lassen? Dh wenn die Bedingung @ customer.sales.present ist? Kannst du das '?' fallen lassen? ... mach dir keine Sorgen. Ich habe einen Code gefunden und getestet. Die Antwort ist "nein"
Jay Killeen
@ JayKilleen Du hast recht. Ruby dreht sich alles um clevere Tricks, aber es ist so clever (:
Nikita Rybak
1
@ NikitaRybak s/that/not that :)
Austin
180
In Ruby müssen die Bedingung und der thenTeil eines ifAusdrucks entweder durch ein Ausdruckstrennzeichen (dh ;oder eine neue Zeile) oder das thenSchlüsselwort getrennt werden.
Es gibt auch einen bedingten Operator in Ruby, aber das ist völlig unnötig. Der Bedingungsoperator ist in C benötigt, weil es ein Operator ist: in C, ifist eine Aussage , und somit keinen Wert zurückgeben kann, wenn Sie also einen Wert zurückgeben möchten, müssen Sie etwas verwenden , das kann einen Wert zurückgeben. Und die einzigen Dinge in C, die einen Wert zurückgeben können, sind Funktionen und Operatoren. Da es unmöglich ist, ifeine Funktion in C zu erstellen, benötigen Sie einen Operator.
In Ruby ist jedoch ifein Ausdruck. Tatsächlich ist alles ein Ausdruck in Ruby, sodass bereits ein Wert zurückgegeben werden kann. Es ist nicht erforderlich, dass der bedingte Operator überhaupt existiert , geschweige denn verwendet wird.
Übrigens: Es ist üblich, Methoden zu benennen, mit denen eine Frage mit einem Fragezeichen am Ende wie folgt gestellt wird:
@item.rigged?
Dies zeigt ein weiteres Problem bei der Verwendung des bedingten Operators in Ruby:
@item.rigged??'Yes':'No'
Es ist einfach schwer zu lesen, wenn mehrere Fragezeichen nahe beieinander liegen.
Oder "No" unless @item.riggedum das zu verhindern!
Veger
Diese Lösung unterscheidet sich darin, dass sie nilanstelle von 'Yes'if item.riggedtrue zurückgibt . Einzeilige if- oder if-Anweisungen werden zurückgegeben, nilwenn die Bedingung nicht erfüllt ist.
Hund Dies ist die beste Antwort - ich liebe es, wie prägnant es alle drei Arten kontrastiert. Vielen Dank!
MrVocabulary
7
Sowohl die Shell- als auch die C-Einzeilenkonstrukte funktionieren (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"
Antworten:
Entfernen
if
vonif @item.rigged ? "Yes" : "No"
Ternärer Operator hat Form
condition ? if_true : if_false
quelle
s/that/not that
:)In Ruby müssen die Bedingung und der
then
Teil einesif
Ausdrucks entweder durch ein Ausdruckstrennzeichen (dh;
oder eine neue Zeile) oder dasthen
Schlüsselwort getrennt werden.All dies würde also funktionieren:
Es gibt auch einen bedingten Operator in Ruby, aber das ist völlig unnötig. Der Bedingungsoperator ist in C benötigt, weil es ein Operator ist: in C,
if
ist eine Aussage , und somit keinen Wert zurückgeben kann, wenn Sie also einen Wert zurückgeben möchten, müssen Sie etwas verwenden , das kann einen Wert zurückgeben. Und die einzigen Dinge in C, die einen Wert zurückgeben können, sind Funktionen und Operatoren. Da es unmöglich ist,if
eine Funktion in C zu erstellen, benötigen Sie einen Operator.In Ruby ist jedoch
if
ein Ausdruck. Tatsächlich ist alles ein Ausdruck in Ruby, sodass bereits ein Wert zurückgegeben werden kann. Es ist nicht erforderlich, dass der bedingte Operator überhaupt existiert , geschweige denn verwendet wird.Übrigens: Es ist üblich, Methoden zu benennen, mit denen eine Frage mit einem Fragezeichen am Ende wie folgt gestellt wird:
Dies zeigt ein weiteres Problem bei der Verwendung des bedingten Operators in Ruby:
Es ist einfach schwer zu lesen, wenn mehrere Fragezeichen nahe beieinander liegen.
quelle
Eine Zeile, wenn:
Dein Fall:
quelle
"No" unless @item.rigged
um das zu verhindern!
nil
anstelle von'Yes'
ifitem.rigged
true zurückgibt . Einzeilige if- oder if-Anweisungen werden zurückgegeben,nil
wenn die Bedingung nicht erfüllt ist.Von dem was ich weiß
3 Einzeiler
a = 10 if <condition>
Beispiel:
a = 10 unless <condition>
Beispiel:
a = <condition> ? <a> : <b>
Beispiel:
Ich hoffe, es hilft.
quelle
Sowohl die Shell- als auch die C-Einzeilenkonstrukte funktionieren (Ruby 1.9.3p429):
quelle
Andernfalls kann der Zustand mit einem ternären Bediener abgedeckt werden
quelle
Der Einfachheit halber können Sie Folgendes verwenden, wenn Sie standardmäßig einen Wert von Null verwenden müssen:
quelle
Sie können verwenden ----
(@ item.rigged)? "Ja Nein"
Wenn @ item.rigged wahr ist, wird "Ja" zurückgegeben, andernfalls wird "Nein" zurückgegeben.
quelle