「三等號(===
)」和「雙等號(==
)」是許多Ruby初學者經常搞混的兩個運算子。一些類別會根據自己的需要而覆寫三等號。本篇會介紹三等號===
的用法。
物件相等性
三等號只有在Object#===
時與Object#==
相等。
|
|
型態匹配
Module
類別覆寫了三等號,使其可以確認物件的型態。例如:
|
|
範圍匹配
Range
類別亦覆寫了三等號,使其可以確認物件是否在範圍內。例如:
|
|
字串匹配
Regexp
類別也覆寫了三等號,使其可以確認字串是否符合正規表示式(Regular Expression)。例如:
|
|
Proc#call
若左手邊是Proc
類別的物件,則其功能等同於Proc#call
。例如:
|
|
Case Equality Operator
三等號有一個名稱叫「Case Equality Operator」。在case...when...else
中,when
便會呼叫===
來匹配,使程式碼更簡潔。
|
|
整理
以下整理各類三等號的等同方法。
類 | 方法 |
---|---|
Object | #== , #eql? |
Module | #is_a? , #kind_of? |
Range | #include? , #member? |
Regexp | (#=~ )(不完全相同) |
Proc | #call , #yield , #[] |