nil || false
zwraca false
i false || nil
zwraca nil
. Czy ktoś ma wyjaśnienie tego?zero || false i false || zero w Ruby
Odpowiedz
W języku Ruby wszystko jest wyrażeniem, a wyrażenie zwróci ostatnią wartość w nim ocenianą.
Dla obu przykładów po lewej stronie wyrażenia ||
jest obliczana wartość fałszerstwa, więc Ruby następnie ocenia prawą stronę i zwraca ją.
Twoje wyjaśnienie jest bardzo jasne, dzięki! – user1538814
||
zwraca wynik ostatniego wyrażonego wyrażenia. Jeśli oceni LHS i znajdzie wartość true
, otrzymasz LHS; w przeciwnym razie otrzymasz RHS (bez względu na to, co może być RHS).
To było naprawdę dobre wyjaśnienie, dziękuję! – user1538814
Jak podkreślono w innych, ||
najpierw ocenia wyrażenie po lewej. Jeśli jest "prawdziwy" (cokolwiek z wyjątkiem false
lub nil
), zwraca to. W przeciwnym razie oblicza wyrażenie po prawej stronie i zwraca je (bez względu na to, co to jest).
Dzięki temu ||
przyda się znacznie więcej niż tylko testy boolowskie. Na przykład, po prostu użył go na drugi dzień podczas pisania kodu dla chronic
gem:
@now = options[:now] || Chronic.time_class.now
Oznacza to, że: „jeśli options
hash zawiera wartość :now
, sklepu, który w @now
przeciwnym razie spadnie z powrotem na Chronic.time_class.now
. jako domyślny ". Jestem pewien, że możesz wymyślić wiele możliwych aplikacji w swoich własnych programach.
&&
jest analogiczna: najpierw oblicza wyrażenie po lewej stronie, a jeśli ocenia się false
lub nil
, że wraca. W przeciwnym razie oblicza wyrażenie po prawej stronie i zwraca je (bez względu na to, co to jest).
Oznacza to &&
jest również przydatna dla dużo więcej niż tylko badań logicznych. Możesz go użyć do wyciśnięcia dwóch linii kodu w jeden. Na przykład:
do_something && do_something_else
(To działa tylko jeśli wiesz, że wartość zwracana do_something
nigdy nie będzie false
lub nil
!)
Można również użyć &&
wycisnąć „osłona” wypowiedzi na ten sam linia jak to, co jest "strzeże":
message && send_message(message)
które mogłyby zastąpić:
unless message.nil?
send_message(message)
end
Nadal uczę się ruby, ale to jest naprawdę pomocne. – user1538814
- 1. W języku Ruby, dlaczego równość z zerą ("Data.new == zero") zwraca zero?
- 2. Traktowanie zero jako zero w sumie funkcji
- 3. jeśli vs if (x == false) w Ruby
- 4. Rubinowy zer i zero
- 5. Usuń zero i pusty ciąg w tablicy w Ruby
- 6. HiddenInput (DisplayValue = false)] vs [ScaffoldColumn (false)]
- 7. JPA @Id i insertable = false, updatable = false throws wyjątek
- 8. 0E30 nie jest ZERO
- 9. Czy minus zero (-0) odpowiada zero (0) w C#
- 10. Usuń Zero z HIGHCHART
- 11. Magento, getSubtotal i getGrandTotal zawsze zwracają zero
- 12. Zatrzymaj make jeśli find -exec zwraca zero zero
- 13. Co oznacza zero w Handler.sendEmptyMessage (0)
- 14. Czy mnożenie liczb zmiennoprzecinkowych przez zero daje zero?
- 15. Zero długość wielowymiarowa tablica
- 16. Różnica między: [ScaffoldColumn (false)] a [Display (AutoGenerateField = false)]
- 17. Integer podział zawsze zero
- 18. MySQL Usuń Trailing Zero
- 19. Anonimowy mmap zero wypełniony?
- 20. mmap z/dev/zero
- 21. UnitTest JSONObject pokazuje zero
- 22. NSUserDefaults objectForKey czasem zero
- 23. Obraz wyjściowy CIFilter zero
- 24. carrierwave content_type zawsze zero
- 25. gcc: dzielenie przez zero
- 26. Jak wyciąć na zero?
- 27. .setAttribute ("disabled", false); zmienia atrybut edytowalny na false
- 28. jQuery Animacja wyściółka Zero
- 29. WPF ActualWidth wynosi zero
- 30. NSWindow zwraca zero (NSApplication)
W przypadku punktów bonusowych wyjaśnij, dlaczego 'nil || false i false || nil' ocenia fałszywe – pguardiario
@pguardiario http://stackoverflow.com/questions/1840488/operator-precedence-for-and-in-ruby – x1a4