ऑब्जेक्ट वाले दो एरे, सरणी के बीच '' का उपयोग करते समय अंतरण नहीं कर रहे हैं। कृपया नीचे टुकड़ा पर एक नज़र डालें:रूबी सरणी चौराहे
ruby-1.9.2-p290 :001 > class A
ruby-1.9.2-p290 :002?> include Comparable
ruby-1.9.2-p290 :003?> attr_reader :key
ruby-1.9.2-p290 :004?> def initialize(key)
ruby-1.9.2-p290 :005?> @key = key
ruby-1.9.2-p290 :006?> end
ruby-1.9.2-p290 :007?> def <=> obj
ruby-1.9.2-p290 :008?> @key <=> obj.key
ruby-1.9.2-p290 :009?> end
ruby-1.9.2-p290 :010?> end
=> nil
ruby-1.9.2-p290 :011 > class B
ruby-1.9.2-p290 :012?> attr_reader :key
ruby-1.9.2-p290 :013?> def initialize(key)
ruby-1.9.2-p290 :014?> @key = key
ruby-1.9.2-p290 :015?> end
ruby-1.9.2-p290 :016?> end
=> nil
ruby-1.9.2-p290 :017 > A.new(1) == A.new(1)
=> true
ruby-1.9.2-p290 :019 > B.new(1) == B.new(1)
=> false
ruby-1.9.2-p290 :020 > a1 = [A.new(1), A.new(2), A.new(3)]
=> [#<A:0x000001009e2f68 @key=1>, #<A:0x000001009e2f40 @key=2>, #<A:0x000001009e2f18 @key=3>]
ruby-1.9.2-p290 :021 > a2 = [A.new(3), A.new(4), A.new(5)]
=> [#<A:0x000001009d44e0 @key=3>, #<A:0x000001009d44b8 @key=4>, #<A:0x000001009d4490 @key=5>]
ruby-1.9.2-p290 :023 > a1 | a2
=> [#<A:0x000001009e2f68 @key=1>, #<A:0x000001009e2f40 @key=2>, #<A:0x000001009e2f18 @key=3>, #<A:0x000001009d44e0 @key=3>, #<A:0x000001009d44b8 @key=4>, #<A:0x000001009d4490 @key=5>]
ruby-1.9.2-p290 :024 > a1 & a2
=> []
चाहिए नहीं a1 & a2 वापसी:
[#<A:0x000001009e2f18 @key=3>]
या, मैं सिर्फ कुछ ...
मुझे यह समझने में मदद करने के लिए धन्यवाद ... क्या हमें #hash में XOR की आवश्यकता है, क्योंकि मैं इसकी तुलना में # ए की तुलना कर रहा हूं। मुझे लगता है, हम केवल @ key.hash –
रख सकते हैं यह काम करेगा, क्योंकि eql? वैसे भी बुलाया जाएगा। हैश की कुंजी के साथ टकराव से बचने के लिए एक्सोर बस वहां है। यहां तक कि def हैश; 1; अंत काम करेगा, लेकिन प्रदर्शन भयानक होगा। –