Ruby uważa, że false
i nil
to jedyne dwie wartości "falsyfikacyjne", podczas gdy wszystko inne jest "prawdą". Jest to z definicji i nie można go modyfikować (przynajmniej w MRI). Definicja ta jest stosowana do wszystkich wbudowanych operatorów jak if
, unless
, while
, until
, cond ? if_truthy : if_falsey
, ||
, &&
...
Pisanie foo == bar
zawsze wywołać metodę ==
na foo
z bar
jako argument. Domyślnie, nil
, false
, true
i wszystkie inne od zaraz, takie jak symbole, itp., Są równe sobie. To może być zmieniony, choć:
def nil.==(bar)
super || bar == false
end
puts "nil == false" if nil == false # => "nil == false"
W Ruby 1.9, można również przedefiniować operatora !
, więc unless foo
niekoniecznie jest taka sama jak if !foo
lub sprzeczne z if foo
:
def true.!
true
end
puts "True?" if true # => "True?"
puts "or not?" if !true # => "or not?"
Nie dlatego, że ktokolwiek poleciłby robić coś takiego ...
zero nie jest * faktycznie fałszywe *, to tylko * falsey *. Idealne wyjaśnienie. +1. I tak, proszę nie przesłonić == lub! lub cokolwiek, jeśli nie masz bardzo dobrego powodu. – MatrixFrog
+1 za dobrą odpowiedź. To samo dotyczy PHP, który musiał wymyślić operatora '===' (tak, to jest * trzy * '='). – Mawg
Dziękuję bardzo za wyjaśnienie. –