새 코드에서이 문제를 재현 할 수 없지만 매우 일관되게 나타납니다.키와 룩업이 동일성 테스트를 통과하면 해시 검색이 실패합니다.
주어진 다음의 데이터 : ==
와 동등 시험을 통과 시간의
[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],
{}]
두 배열 (t
및 time_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 매치를 활용하기 위해 코드를 수정 하겠지만, 이런 식으로하는 것은 싫어.
어느 것이 동일하다고 말하는가? 정보를 위해 나는 MRI 루비 1.9.3p327을 윈도우에 사용하고있다. 이 문제는 우리의 유능한 리눅스 박스에서도 발생합니다. – Arjes
해시 메서드.이 메서드는 동일성 검사에도 사용됩니다. http://techbot.me/2011/05/ruby-basics-equality-operators-ruby/를 확인하십시오. - 아직 현재인지 확실하지 않지만 확인할 수있는 길입니다. – mcfinnigan
'tshash => -3958758151071268050'와'hsh.keys.first.hash = '는'hsh.keys.first.hash'와 같은'hash'를 가지고 있기 때문에'hash' 불평등은 문제가되지 않습니다 : > -3958758151071268050'. 'hsh.keys.first.hash == t.hash => true' –