| Toán tử | So sánh | Dùng khi |
|---|---|---|
== | giá trị (thường được override) | so sánh tổng quát |
eql? | giá trị và cùng class (dùng cho hash key) | 1.eql?(1.0) → false |
equal? | object identity — cùng object_id | kiểm tra cùng object |
=== | "case equality" — mỗi class override theo nghĩa riêng | when trong case |
ruby
1 == 1.0 # => true (giá trị bằng)
1.eql?(1.0) # => false (khác class: Integer vs Float)
1.equal?(1) # => true (Integer nhỏ cached cùng object)
"a".equal?("a")# => false (2 String object khác nhau)
# === — dùng ngầm trong case/when
case 42
when 1..50 then puts "trong khoảng" # Range#=== gọi include?
when Integer then puts "là integer"
endHình dung: == hỏi "bằng nhau không?", equal? hỏi "có phải cùng một vật không?".