Ruby cho rằng false
và nil
là hai giá trị "sai" duy nhất, trong khi mọi thứ khác là "trung thực". Điều này là theo định nghĩa và không thể sửa đổi (ít nhất là trong MRI). Định nghĩa này được sử dụng cho tất cả các nhà khai thác BUILTIN như if
, unless
, while
, until
, cond ? if_truthy : if_falsey
, ||
, &&
...
Viết foo == bar
sẽ luôn luôn gọi phương thức ==
trên foo
với bar
như một cuộc tranh cãi. Theo mặc định, nil
, false
, true
và tất cả các biểu tượng khác giống như biểu tượng, v.v ..., chỉ bằng với chính chúng. Điều này có thể được thay đổi, mặc dù:
def nil.==(bar)
super || bar == false
end
puts "nil == false" if nil == false # => "nil == false"
Trong Ruby 1.9, bạn cũng có thể xác định lại các nhà điều hành !
, vì vậy unless foo
không nhất thiết phải giống như if !foo
hoặc ngược lại của if foo
:
def true.!
true
end
puts "True?" if true # => "True?"
puts "or not?" if !true # => "or not?"
Không phải là bất kỳ ai cũng khuyên bạn nên làm bất cứ điều gì như thế này ...
Nguồn
2010-06-21 05:52:56
nil không * thực sự sai *, chỉ là * falsey *. Lời giải thích hoàn hảo. +1. Và có, xin đừng ghi đè == hoặc! hoặc bất cứ điều gì nếu bạn không có một lý do rất tốt. – MatrixFrog
+1 để có câu trả lời hay. Điều tương tự cũng đúng trong PHP mà phải phát minh ra toán tử '===' (có nghĩa là * ba * '=') – Mawg
Cảm ơn rất nhiều vì đã giải thích. –