2012-02-21 2 views
1

이 슬라이드는 10 Things Every Java Programmer Should Know About Ruby 슬라이드의 슬라이드 6에서 나왔습니다.Ruby에서 변수 이름은 객체가 아닙니다. 왜?

이제 저는 몇 가지 해답을 살펴 보았습니다. 일반적으로 포인터가 아니라 값을 가진 모든 것이 개체라는 공통적 인 견해가 있습니다. 나는 이것으로 혼란 스럽다. a = 1 인 경우 a1과 메소드를 공유하며 실제로는 object_id과 같을 것입니다. 어떻게 "a is an object"가 정확하지 않다고 말하는가?

+0

슬라이드는 'a'가 개체가 아니라고 말하지 않습니다. * name *은 객체가 아닙니다. 표시하면 이름이 객체를 참조합니다. –

+0

미묘하지만 중요한 구별. 감사. –

+0

* 아주 * 아주 엄격히 말하면 변수 이름은 * 객체라고 주장 할 수 있습니다. 구체적으로, 그것들은'Symbol'입니다. * 변수 *는 분명히 객체가 아닙니다. (어느 쪽의 메소드도, BTW. * 메소드를 나타내는 * 프록시 오브젝트를 취득 할 수 있습니다 만, 메소드 자체를 취득 할 수 없습니다.) –

답변

4

슬라이드가 말하는 내용은 정확합니다. 변수는 개체가 아닙니다. 그러나 여기에 두 번째 성명서 - "단순한 포인터가 아닌 값을 가진 것이 무엇이든 객체입니다"- "가치/가치있는 것"과 다른 "단순한 포인터"가없는 루비의 맥락 에서조차 의미가 없습니다. 사물".

변수 a은 객체 1과 메소드를 공유하지 않습니다. 1과 똑같은 것은 아닙니다. 나중에 a = 2을 작성하면 완전히 1을 버리게됩니다. 변수는 객체 1에 대한 참조를 보유하는 단지 장소입니다. 예를 들어, 언급 한 바와 같이 변수에는 별개의 object_id이 없습니다. 예를 들어 객체와 같이이 장소와 대화 할 수 없습니다. 변수로 할 수있는 유일한 일은 참조하는 객체와 대화하고 다른 객체에 대한 참조로 객체를 재 할당하는 것입니다. 변수 자체는 객체가 아니며, 객체에 대한 참조를 저장하기위한 장소 일뿐입니다.

+0

자세한 답변을 보내 주셔서 감사합니다. 나는 내가 머리를 써야하는 것들 중 하나라고 생각한다. 거의 모든 다른 언어에서 그렇습니다. 두 언어를 비교하는 이야기에서 혼란스러워졌습니다. Ruby에 특유한 것 중 하나 인 것처럼 보입니다. 실제로는 그렇지 않습니다. –

+0

@ why-el : 그래, 내 생각에 그가 지적한 이유는 루비의 명성이 "모든 것이 하나의 객체"라는 것인데, 실제로 변수가 아닌 객체와 같은 것들이 몇 개있을 때이다. – Chuck

관련 문제