寫程式時無可避免的就是兩個物件或變數是否相等,而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#===
與==
同功能,其子類別會依據需求而覆寫此方法,下一篇再詳細說明。
參考資料