2014-05-12 2 views
0

irb에 들어가서 hash을 입력하면 2601657421772335946, Fixnum과 같은 값이 반환됩니다. hash 무엇입니까?irb에서 '해시'란 무엇입니까?

+0

나를 위해 그것은'69887696075100'를 반환했습니다. – Pavan

답변

1

거의 모든 irb에서 self을 포함에 hash 응답합니다. fine Object manual에서 :

해시()

이 객체의 Fixnum 해시 값을 생성한다. 이 함수는 a.eql?(b)이 의미하는 속성이 a.hash == b.hash이어야합니다.

해시 값은 두 개의 개체가 동일한 해시 키를 참조하는지 확인하기 위해 해시 클래스에서 sql?과 함께 사용됩니다. Fixnum의 용량을 초과하는 해시 값은 사용되기 전에 잘립니다.

개체의 해시 값이 루비 호출이나 구현에서 동일하지 않을 수 있습니다. 루비 호출과 구현에서 안정적인 식별자가 필요한 경우 맞춤 메소드로 생성해야합니다.

Hash 클래스는 내부적으로 hash 값을 사용하여 해시 키를 배열하는 방법을 찾습니다.

1

IRB에 로그인하면 selfmain (Object 클래스의 인스턴스 임)으로 설정되었습니다. 이제 hash을 쓸 때 실제로는 self (암시 적 임)에서 호출되는 Object#hash 메서드입니다.

Arup-iMac:arup$ irb 
2.1.0 :001 > self 
=> main 
2.1.0 :002 > method(:hash).receiver 
=> main 
2.1.0 :003 > self.class 
=> Object 
2.1.0 :004 > 

#hash이 필요합니까?

이 개체에 대한 Fixnum 해시 값을 생성합니다. 이 함수는 a.eql (b)가 a.hash == b.hash를 의미하는 속성을 가져야합니다.

해시 값은 eql과 함께 사용됩니까? 두 객체가 동일한 해시 키를 참조하는지 확인하기 위해 Hash 클래스에 의해 호출됩니다. Fixnum의 용량을 초과하는 해시 값은 사용되기 전에 잘립니다.

개체의 해시 값이 루비 호출이나 구현에서 동일하지 않을 수 있습니다. 루비 호출과 구현에서 안정적인 식별자가 필요한 경우 맞춤 메소드로 생성해야합니다. 루비