Odpowiedzi:
Usuń ifzif @item.rigged ? "Yes" : "No"
Operator trójskładnikowy ma formę condition ? if_true : if_false
s/that/not that :)
W Ruby warunek i thenczęść ifwyrażenia muszą być oddzielone separatorem wyrażeń (tj. ;Lub znakiem nowej linii) lub thensłowem kluczowym.
Wszystko to działałoby:
if @item.rigged then 'Yes' else 'No' end
if @item.rigged; 'Yes' else 'No' end
if @item.rigged
'Yes' else 'No' end
W Rubim istnieje również operator warunkowy, ale jest to całkowicie niepotrzebne. Operator warunkowy jest potrzebny w C, ponieważ jest operatorem: w C ifjest instrukcją i dlatego nie może zwrócić wartości, więc jeśli chcesz zwrócić wartość, musisz użyć czegoś, co może zwrócić wartość. A jedynymi rzeczami w C, które mogą zwrócić wartość, są funkcje i operatory, a ponieważ niemożliwe jest utworzenie iffunkcji w C, potrzebujesz operatora.
W Ruby ifjest jednak wyrażenie. W rzeczywistości wszystko jest wyrażeniem w Rubim, więc może już zwrócić wartość. Operator warunkowy nie musi nawet istnieć , a tym bardziej go używać.
BTW: zwyczajowo nazywa się metody stosowane do zadawania pytań ze znakiem zapytania na końcu, takie jak:
@item.rigged?
To pokazuje kolejny problem z użyciem operatora warunkowego w Rubim:
@item.rigged? ? 'Yes' : 'No'
Po prostu trudno jest go odczytać za pomocą wielu sąsiadujących ze sobą znaków zapytania.
Jedna linia, jeśli:
<statement> if <condition>
Twój przypadek:
"Yes" if @item.rigged
"No" if !@item.rigged # or: "No" unless @item.rigged
"No" unless @item.riggedaby zapobiec!
nilzamiast 'Yes'if item.riggedjest prawdziwe. Jednowierszowe, jeśli lub jeśli instrukcje nie zwracają, niljeśli warunek nie jest spełniony.
Z tego co wiem
3 jednowarstwowe
a = 10 if <condition>przykład:
a = 10 if true # a = 10
b = 10 if false # b = nil
a = 10 unless <condition>przykład:
a = 10 unless false # a = 10
b = 10 unless true # b = nil
a = <condition> ? <a> : <b>przykład:
a = true ? 10 : 100 # a = 10
a = false ? 10 : 100 # a = 100
Mam nadzieję, że to pomoże.
Działa zarówno konstrukcja jednowierszowa powłoki, jak i C (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"
w przeciwnym razie warunek można pokryć operatorem trójskładnikowym
@item.rigged? ? 'Yes' : 'No'
Możesz użyć ----
(@ item.rigged)? "Tak nie"
Jeśli @ item.rigged jest prawdziwe, zwróci „Tak”, w przeciwnym razie zwróci „Nie”