寫程式時無可避免的就是兩個物件或變數是否相等,而Ruby提供一些方法來確認其相等性。
比較運算子
比較兩物件是否相等時可以使用雙等號(==),相等時返回true,反之則返回false。不等於則使用不等於運算子(!=)。通常實作自定義類別時會覆寫這兩個方法。
1
2
3
4
5
6
7
8
9
| s1 = "apple"
s2 = "apple"
s1 == s2 # => true
s1 != s2 # => false
a1 = ["apple", "banana"]
a2 = ["apple", "banana"]
a1 == a2 # => true
a1 != a2 # => false
|
不同型態的數字也可以使用雙等號。例如:
1
2
3
| i = 1
f = 1.0
i == f # => true
|
equal?
equal?方法比較兩個變數是否參考至同一物件,因此在實作自定義類別時不應覆寫equal?方法。
1
2
3
4
5
6
7
8
| s1 = "apple"
s2 = "apple"
s1.object_id == s2.object_id # => false
s1.equal? s2 # => false
s2 = s1
s1.object_id == s2.object_id # => true
s1.equal? s2 # => true
|
eql?
eql?方法比較兩物件的雜湊值(hash value)是否相等。對於Object類別的物件而言,eql?和==是相同的。通常在實作自定義類別時,亦會使eql?和==的返回值相等以保持這樣的慣例。
Numeric類別則是其中的一個例外。
1
2
3
| 1 == 1.0 # => true
1.hash == 1.0.hash # => false
1.eql? 1.0 # => false
|
那===呢
Object#===與==同功能,其子類別會依據需求而覆寫此方法,下一篇再詳細說明。
參考資料