在Java中,==
是最強的一種相等(指針相等):a == b
總是暗示a.equals(b)
。然而,在Ruby中,==
比.equals?
弱:在Ruby中做什麼==?
ruby-1.9.2-rc2 > 17 == 17.0
=> true
ruby-1.9.2-rc2 > 17.equal?(17.0)
=> false
所以,我在哪裏可以瞭解更多有關==
?當我比較兩個對象時,我應該期待什麼樣的檢查?
在Java中,==
是最強的一種相等(指針相等):a == b
總是暗示a.equals(b)
。然而,在Ruby中,==
比.equals?
弱:在Ruby中做什麼==?
ruby-1.9.2-rc2 > 17 == 17.0
=> true
ruby-1.9.2-rc2 > 17.equal?(17.0)
=> false
所以,我在哪裏可以瞭解更多有關==
?當我比較兩個對象時,我應該期待什麼樣的檢查?
實際上它們都只是方法 ==表示 對象。==(other_object) 等於?裝置 的Object.Equals?(other_object)
在這種情況下,雖然,等於基本上用於散列查詢比較 即 a_hash [1]不應該是相同的密鑰值對a_hash [1.0]
HTH。 -r
jruby-1.5.0 > 17 ==17
=> true
jruby-1.5.0 > 17 == 17.0
=> true
jruby-1.5.0 > 17 === 17.0
=> true
jruby-1.5.0 > 17.equal?(17.0)
=> false
jruby-1.5.0 > 17.id
=> 35
jruby-1.5.0 > (17.0).id
(irb):12 warning: Object#id will be deprecated; use Object#object_id
=> 2114
ruby中的一切都是一個對象。對象17與17.0不是同一個對象並且相等?比較對象,而不是對象的值。
==
簡而言之就是一種方法。我認爲這是解釋真的很好here:
通常情況下,這種方法在派生類中重寫提供類特定的含義。
與Numeric
是一個例子沿。
雖然這裏有一個缺陷:因爲==
是左操作數的一種方法,所以假設a==b
的結果應該與b==a
的結果相同並不總是安全的。尤其是在a
是一個方法調用的情況下,在Ruby等動態語言中,它不一定總是返回相同類型的值。
似乎他們可以選擇更好的eql方法名稱?和平等? – 2010-08-02 17:33:58
CLISP更糟糕:'eq','eql','equal','equalp'和'='。雖然有更好的命名操作符,比如'string-equal'和'tree-equal'。 – 2010-08-02 17:58:11
好的,所以我不應該使用'=='比較兩個對象?但是即使'5'是Ruby中的一個對象......所以使用'=='比較安全的是什麼?字符串和數字,當然。數組呢?哈希? – 2010-08-05 17:34:01