यहाँ कुछ उदाहरण कोड है:रुबी के ऐरे कैसे हैं समानता के लिए तत्वों की तुलना करें?
class Obj
attr :c, true
def == that
p '=='
that.c == self.c
end
def <=> that
p '<=>'
that.c <=> self.c
end
def equal? that
p 'equal?'
that.c.equal? self.c
end
def eql? that
p 'eql?'
that.c.eql? self.c
end
end
a = Obj.new
b = Obj.new
a.c = 1
b.c = 1
p [a] | [b]
यह 2 वस्तुओं प्रिंट लेकिन यह 1 वस्तु प्रिंट चाहिए। तुलनात्मक तरीकों में से कोई भी नहीं कहा जाता है। ऐरे कैसे है समानता की तुलना?
बस पुष्टि करने के लिए - रूबी के ऐरे # हैश विधि की गारंटी है कि मान बराबर होंगे यदि केवल और यदि सरणी की सामग्री बराबर होती है? –
@EricWalker सं। यह गारंटी है कि दो एरे के हैंश बराबर हैं (लेकिन केवल तभी नहीं) दोनों सरणी में एक ही क्रम में समान हैश मान वाले तत्व होते हैं। हालांकि यह इस सवाल से असंबंधित है क्योंकि यहां हैश केवल तत्वों पर बुलाया जाता है, कभी भी सरणी पर नहीं। – sepp2k