「三等號(===)」和「雙等號(==)」是許多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, #[] |