irb에 들어가서 hash
을 입력하면 2601657421772335946
, Fixnum
과 같은 값이 반환됩니다. hash
무엇입니까?irb에서 '해시'란 무엇입니까?
답변
거의 모든 irb
에서 self
을 포함에 hash
응답합니다. fine Object
manual에서 :
해시()
이 객체의
Fixnum
해시 값을 생성한다. 이 함수는a.eql?(b)
이 의미하는 속성이a.hash == b.hash
이어야합니다.해시 값은 두 개의 개체가 동일한 해시 키를 참조하는지 확인하기 위해 해시 클래스에서
sql?
과 함께 사용됩니다. Fixnum의 용량을 초과하는 해시 값은 사용되기 전에 잘립니다.개체의 해시 값이 루비 호출이나 구현에서 동일하지 않을 수 있습니다. 루비 호출과 구현에서 안정적인 식별자가 필요한 경우 맞춤 메소드로 생성해야합니다.
Hash
클래스는 내부적으로 hash
값을 사용하여 해시 키를 배열하는 방법을 찾습니다.
IRB에 로그인하면 self
이 main
(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의 용량을 초과하는 해시 값은 사용되기 전에 잘립니다.
개체의 해시 값이 루비 호출이나 구현에서 동일하지 않을 수 있습니다. 루비 호출과 구현에서 안정적인 식별자가 필요한 경우 맞춤 메소드로 생성해야합니다. 루비
나를 위해 그것은'69887696075100'를 반환했습니다. – Pavan