Jeśli warunek kończy się na „?” czy można to upuścić? To znaczy, czy warunek to @ customer.sales.present? czy możesz upuścić „?”? ... nie martw się. Znalazłem kod, który miałem i przetestowałem. Odpowiedź brzmi „nie”
Jay Killeen
@JayKilleen Masz rację. W Ruby chodzi o sprytne sztuczki, ale takie sprytne (:
Nikita Rybak,
1
@NikitaRybak s/that/not that :)
Austin
180
W Ruby warunek i thenczęść ifwyrażenia muszą być oddzielone separatorem wyrażeń (tj. ;Lub znakiem nowej linii) lub thensłowem kluczowym.
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.
To rozwiązanie różni się tym, że zwraca nilzamiast 'Yes'if item.riggedjest prawdziwe. Jednowierszowe, jeśli lub jeśli instrukcje nie zwracają, niljeśli warunek nie jest spełniony.
Pies To najlepsza odpowiedź - uwielbiam, jak zwięźle kontrastuje na wszystkie trzy sposoby. Dzięki!
MrVocabulary
7
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"
Odpowiedzi:
Usuń
if
zif @item.rigged ? "Yes" : "No"
Operator trójskładnikowy ma formę
condition ? if_true : if_false
źródło
s/that/not that
:)W Ruby warunek i
then
częśćif
wyrażenia muszą być oddzielone separatorem wyrażeń (tj.;
Lub znakiem nowej linii) lubthen
słowem kluczowym.Wszystko to działałoby:
W Rubim istnieje również operator warunkowy, ale jest to całkowicie niepotrzebne. Operator warunkowy jest potrzebny w C, ponieważ jest operatorem: w C
if
jest 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 utworzenieif
funkcji w C, potrzebujesz operatora.W Ruby
if
jest 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:
To pokazuje kolejny problem z użyciem operatora warunkowego w Rubim:
Po prostu trudno jest go odczytać za pomocą wielu sąsiadujących ze sobą znaków zapytania.
źródło
Jedna linia, jeśli:
Twój przypadek:
źródło
"No" unless @item.rigged
aby zapobiec!
nil
zamiast'Yes'
ifitem.rigged
jest prawdziwe. Jednowierszowe, jeśli lub jeśli instrukcje nie zwracają,nil
jeśli warunek nie jest spełniony.Z tego co wiem
3 jednowarstwowe
a = 10 if <condition>
przykład:
a = 10 unless <condition>
przykład:
a = <condition> ? <a> : <b>
przykład:
Mam nadzieję, że to pomoże.
źródło
Działa zarówno konstrukcja jednowierszowa powłoki, jak i C (ruby 1.9.3p429):
źródło
w przeciwnym razie warunek można pokryć operatorem trójskładnikowym
źródło
Dla uproszczenia: Jeśli potrzebujesz domyślnej wartości, jeśli zero, możesz użyć:
źródło
Możesz użyć ----
(@ item.rigged)? "Tak nie"
Jeśli @ item.rigged jest prawdziwe, zwróci „Tak”, w przeciwnym razie zwróci „Nie”
źródło