Fixnum == 2.class
#=> true
Fixnum === 2.class
#=> false
爲什麼===
不起作用?我怎麼能知道這個方法===屬於(現在我想它會調用Object#==
或Object#===
),但是我怎麼能確定它?
Fixnum == 2.class
#=> true
Fixnum === 2.class
#=> false
爲什麼===
不起作用?我怎麼能知道這個方法===屬於(現在我想它會調用Object#==
或Object#===
),但是我怎麼能確定它?
重複:
案例平等。請參閱Object#===的文檔。這種方法通常在Object
的子類中被覆蓋。例如,Module#===:
Case Equality - 如果anObject是mod的實例或mod的後代之一,則返回true。模塊的用途有限,但可用於case語句以按類別對對象進行分類。
>> Module.new === Module
=> false
>> Module === Module.new
=> true
Regexp#===是另外一個,在這種情況下,它的=~
的代名詞:
a = "HELLO"
case a
when /^[a-z]*$/; print "Lower case\n"
when /^[A-Z]*$/; print "Upper case\n"
else; print "Mixed case\n"
end
在IRB的一個例子:
>> "a" === /a/
=> false
>> /a/ === "a"
=> true
記住,第一個返回false,因爲你在上String
這不是一回事。在第二個例子中,我們在Regexp
最後做===
,Range是相當不錯的一個,它調用Range對象上include?
和傳遞你的價值:
>> (1..100) === 3
=> true
>> (1..100) === 300
=> false
對於這些列表,檢查出RubyDoc.info核心文檔和搜索===
在方法區域在左側框架
==通常只檢查兩個參數的值,當====檢查類型時。
'==='不檢查類型,除非其中一個子類已經覆蓋它以這種方式工作 –
我會假設'=='意味着他們有相同的價值,而'==='意味着他們是同一個對象? – TyrantWave
由於在SO之前已經回答了很多次,'==='也考慮了對象的類型。 –
@TyrantWave和@Ash - '==='沒有用於類型檢查的細節。當它在'Object'的子類中重寫時。例如,'Range#==='在對象上包含'include?'。它不關心在這種情況下的類型 –