11/08/2018, 21:12

Tìm hiểu về sự khác nhau giữa eql? và equal? trong Ruby

Tìm hiểu về sự khác nhau giữa eql? và equal? trong Ruby Tiếp nối bài viết Bạn biết gì về toán tử "===" triple equals (case equality operator) trong Ruby? , ở bài viết này mình sẽ giải thích rõ hơn về sự khác nhau giữa eql? và equal? trong Ruby. Các bạn có thể đọc lại Bạn biết gì về toán ...

Tìm hiểu về sự khác nhau giữa eql? và equal? trong Ruby

Tiếp nối bài viết Bạn biết gì về toán tử "===" triple equals (case equality operator) trong Ruby?, ở bài viết này mình sẽ giải thích rõ hơn về sự khác nhau giữa eql? và equal? trong Ruby.

Các bạn có thể đọc lại Bạn biết gì về toán tử "===" triple equals (case equality operator) trong Ruby? để hiểu rõ hơn về == và ===.

Một thực tế là những người mới chân ướt chân ráo bước vào lập trình với Ruby thường nhầm lẫn các phương thức liên quan đến bình đẳng ==, eql? và equal?.

Trong số các phương thức trên thì equal? được mô tả dễ hiểu nhất về bình đẳng bởi cái tên của nó.

equal? sẽ trả về kết quả là true chỉ khi nó (đối tượng bị gọi bởi equal?) và tham số (đối tượng được gọi bởi equal?) là cùng một đối tượng (giống nhau hoàn toàn).

Ví dụ:

some_word = "word"
some_other_word = some_word

some_word.equal? some_other_word # true

eql? sẽ trả về kết quả là true khi cả hai đối tượng bị gọi bởi eql? và đối tượng được gọi bởi eql? có gía trị giống nhau.

Ví dụ:

1 == 1.0 #=> true 
1.eql? 1.0 #=> false
"test".eql? "test" #=> true

Tổng kết lại ta có:

a = 'a' # => 'a' 
other = a.dup # => 'a'

a == other # => true
a === other # => true
a.eql? other # => true
a.equal? other # => false
a.equal? a # => true

Đó là tất cả! Rất đơn giản và dễ hiểu phải không nào :smile:

Tham khảo:

  • What is the difference between '===', '==', '.equal?' and '.eql?' in Ruby?
0