" Ruby Symbols 이해하기 "를 읽었음에도 불구하고 , 저는 기호 를 사용할 때 메모리의 데이터 표현에 여전히 혼란 스럽습니다. 다른 객체에 포함 된 두 개의 심볼이 동일한 메모리 위치에 존재하는 경우 어떻게 다른 값 을 포함하고 있습니까? 동일한 메모리 위치에 동일한 값이 포함될 것으로 예상했습니다.
이것은 링크의 인용문입니다.
문자열과 달리 동일한 이름의 심볼이 초기화되고 루비 세션 중 한 번만 메모리에 존재합니다.
동일한 메모리 위치에 포함 된 값을 구별하는 방법을 이해하지 못합니다.
이 예를 고려하십시오.
patient1 = { :ruby => "red" }
patient2 = { :ruby => "programming" }
patient1.each_key {|key| puts key.object_id.to_s}
3918094
patient2.each_key {|key| puts key.object_id.to_s}
3918094
patient1
그리고 patient2
두 해시, 괜찮아요 있습니다. :ruby
그러나 상징입니다. 다음을 출력하려면 :
patient1.each_key {|key| puts key.to_s}
그러면 무엇이 출력됩니까? "red"
, 또는 "programming"
?
잠시 해시를 잊어 버리면 기호가 값에 대한 포인터 라고 생각 합니다. 내가 가진 질문은 다음과 같습니다.
- 기호에 값을 지정할 수 있습니까?
- 기호는 값이있는 변수에 대한 포인터 일 뿐입니 까?
- 심볼이 전역이라면 심볼이 항상 한 가지를 가리킴을 의미합니까?
puts patient1[:ruby]
"빨간색"이 인쇄되고이라고 말하면puts patient2[:ruby]
"프로그래밍"이 인쇄됩니다.