2010-09-30 10 views

Antwort

317

if von if @item.rigged ? "Yes" : "No"

Ternary Betreiber entfernen hat Form condition ? if_true : if_false

+7

Ich bin schon unzählige Male auf diese Antwort für die Syntax zurückgekommen ... Danke! –

+0

Wenn Ihre Bedingung in einem '?' Endet Ist es möglich, es fallen zu lassen? Dh wenn die Bedingung @ customer.sales.present ist? kannst du das '?' ... mach dir keine Sorgen. Habe einen Code gefunden und getestet. Die Antwort lautet "Nein" –

+0

@JayKilleen Sie haben Recht. Ruby dreht sich alles um clevere Tricks, aber es ist _that_ clever (: –

148

In Ruby, den Zustand und die then Teil eines if Ausdruck muss entweder durch einen Ausdruckseparator (dh ; oder einen Zeilenumbruch) oder das then Schlüsselwort getrennt werden.

So würden alle diese 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 wird in C benötigt, da es ein Operator ist: in C ist if eine Anweisung und kann daher keinen Wert zurückgeben. Wenn Sie also einen Wert zurückgeben möchten, müssen Sie einen Wert verwenden, der zurückgeben kann. Und die einzigen Dinge in C, die einen Wert zurückgeben können, sind Funktionen und Operatoren, und da es unmöglich ist, if eine Funktion in C zu machen, brauchen Sie einen Operator. In Ruby ist if ein Ausdruck. In der Tat, alles ist ein Ausdruck in Ruby, so dass bereits kann einen Wert zurückgeben. Es besteht keine Notwendigkeit für den bedingten Operator, selbst existieren, geschweige denn es zu benutzen.

BTW: Es ist üblich, Namen Methoden, die verwendet werden am Ende eine Frage mit einem Fragezeichen fragen, wie folgt aus:

@item.rigged? 

Dies ein anderes Problem zeigt mit dem bedingten Operator in Ruby mit:

@item.rigged? ? 'Yes' : 'No' 

Es ist einfach schwer zu lesen mit den vielen Fragezeichen, die nahe beieinander liegen.

+2

+1 für die'; 'Erklärung. –

+4

danke. Dies sollte als beste Antwort gewählt werden. – MostafaMV

48

Eine Zeile, wenn:

<statement> if <condition> 

Ihr Fall:

"Yes" if @item.rigged 

"No" if [email protected] # or: "No" unless @item.rigged 
+10

Oder "Nein", außer @ item.rigged', um das '!' Zu verhindern – Veger

6

Sowohl die Schale und C einzeilige Konstrukten Arbeit (Rubin 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" 
1

Sie können ----

verwenden

(@item.rigged)? "Ja": "Nein"

Wenn @item.in Ordnung gebracht ist wahr, wird es ‚Ja‘ sonst zurückkehren es zurück ‚Nein‘

4

wenn sonst Bedingung kann mit ternären Operator

@item.rigged? ? 'Yes' : 'No' 
8

Von abgedeckt werden, was ich weiß

3 Einzeiler

  1. a = 10 if <condition>

Beispiel: 012., b = 10 if false # b = nil

  1. a = 10 unless <condition>

Beispiel: a = 10 unless false # a = 10, b = 10 unless true # b = nil

  1. a = <condition> ? <a> : <b>

Beispiel: a = true ? 10 : 100 # a = 10, a = false ? 10 : 100 # a = 100

Ich hoffe es hilft.

Verwandte Themen