<%if @item.rigged %>Yes<%else%>No<%end%>
Ich habe an so etwas gedacht?
if @item.rigged ? "Yes" : "No"
Aber es funktioniert nicht. Ruby hat das, ||=
aber ich bin mir nicht mal sicher, wie ich das Ding benutzen soll.
<%if @item.rigged %>Yes<%else%>No<%end%>
Ich habe an so etwas gedacht?
if @item.rigged ? "Yes" : "No"
Aber es funktioniert nicht. Ruby hat das, ||=
aber ich bin mir nicht mal sicher, wie ich das Ding benutzen soll.
Antworten:
Entfernen if
vonif @item.rigged ? "Yes" : "No"
Ternärer Operator hat Form condition ? if_true : if_false
s/that/not that
:)
In Ruby müssen die Bedingung und der then
Teil eines if
Ausdrucks entweder durch ein Ausdruckstrennzeichen (dh ;
oder eine neue Zeile) oder das then
Schlüsselwort getrennt werden.
All dies würde also funktionieren:
if @item.rigged then 'Yes' else 'No' end
if @item.rigged; 'Yes' else 'No' end
if @item.rigged
'Yes' else 'No' end
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:
@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.
Eine Zeile, wenn:
<statement> if <condition>
Dein Fall:
"Yes" if @item.rigged
"No" if !@item.rigged # or: "No" unless @item.rigged
"No" unless @item.rigged
um das zu verhindern!
nil
anstelle von 'Yes'
if item.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 if true # a = 10
b = 10 if false # b = nil
a = 10 unless <condition>
Beispiel:
a = 10 unless false # a = 10
b = 10 unless true # b = nil
a = <condition> ? <a> : <b>
Beispiel:
a = true ? 10 : 100 # a = 10
a = false ? 10 : 100 # a = 100
Ich hoffe, es hilft.
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"
Andernfalls kann der Zustand mit einem ternären Bediener abgedeckt werden
@item.rigged? ? 'Yes' : 'No'
Sie können verwenden ----
(@ item.rigged)? "Ja Nein"
Wenn @ item.rigged wahr ist, wird "Ja" zurückgegeben, andernfalls wird "Nein" zurückgegeben.