2013-03-25 1 views
0

새 코드에서이 문제를 재현 할 수 없지만 매우 일관되게 나타납니다.키와 룩업이 동일성 테스트를 통과하면 해시 검색이 실패합니다.

주어진 다음의 데이터 : ==와 동등 시험을 통과 시간의

[53] pry> hsh[t] 
=> {} 
[54] pry> hsh[time_range] 
=> nil 
[55] pry> hsh.assoc(time_range) 
=> [[Fri, 01 Mar 2013 00:00:00 +0000, Sun, 24 Mar 2013 23:59:59 +0000], 
{}] 

두 배열 (ttime_range) :

[47] pry> t 
=> [Fri, 01 Mar 2013 00:00:00 +0000, Sun, 24 Mar 2013 23:59:59 +0000] 
[48] pry> time_range 
=> [Fri, 01 Mar 2013 00:00:00 +0000, Sun, 24 Mar 2013 23:59:59 +0000] 
[49] pry> t == time_range 
=> true 
[52] pry> hsh 
=> {[Fri, 01 Mar 2013 00:00:00 +0000, Sun, 24 Mar 2013 23:59:59 +0000]=> {}, 
[Fri, 01 Feb 2013 00:00:00 +0000, Thu, 28 Feb 2013 23:59:59 +0000]=> {}, 
[Tue, 01 Jan 2013 00:00:00 +0000, Thu, 31 Jan 2013 23:59:59 +0000]=> {}} 

이 조회를 할 때 내가 가지고있는 문제 , 단 하나의 경우 (time_range)에서 값을 찾지 못합니다. 나는 해시 코드 (http://www.ruby-doc.org/core-1.9.3/Hash.html#method-i-5B-5D)를 조사하려고 시도했지만 여전히 난처한 상태이다.

는 "Which equality test does Ruby's Hash use when comparing keys?"에 따르면, 해시 키 평등을 결정하기 위해 eql?를 사용하지만이 문제가되는 키는 eql?을 통과 :

[63] pry> t.eql? time_range 
=> true 
[64] pry> time_range.eql? t 
=> true 

사람은 통찰력을 제공 할 수 있습니까? 지금 당장 assoc 매치를 활용하기 위해 코드를 수정 하겠지만, 이런 식으로하는 것은 싫어.

답변

0

이러한 링크를 기반으로 두 개체의 해시가 동일합니까?

두 개의 개별 런타임에서 ==를 만족하지만 기본 키의 object_ids가 다르기 때문에 키를 검색하지 못하는 다중 스레드 JRuby 환경에서 문제가 발생했습니다. 비슷한 종류의 문제 일 수 있습니다. 두 개의 A와 B 객체는 A.eql을 만족합니까? B는 만족하지만 만족하지 않는다 A는 B

+0

어느 것이 동일하다고 말하는가? 정보를 위해 나는 MRI 루비 1.9.3p327을 윈도우에 사용하고있다. 이 문제는 우리의 유능한 리눅스 박스에서도 발생합니다. – Arjes

+0

해시 메서드.이 메서드는 동일성 검사에도 사용됩니다. http://techbot.me/2011/05/ruby-basics-equality-operators-ruby/를 확인하십시오. - 아직 현재인지 확실하지 않지만 확인할 수있는 길입니다. – mcfinnigan

+0

'tshash => -3958758151071268050'와'hsh.keys.first.hash = '는'hsh.keys.first.hash'와 같은'hash'를 가지고 있기 때문에'hash' 불평등은 문제가되지 않습니다 : > -3958758151071268050'. 'hsh.keys.first.hash == t.hash => true' –

관련 문제