2013-02-22 5 views
1

나는 도움이되는 클래스를 루비를 배우고 만든 해요 : 모든에 대한 두 번째 줄 것입니다 내가 궁금루비 클래스 반환 값

not doing anything 
#<WhatImDoing:0xb74b14e8> 

:

class WhatImDoing 
    def initialize 
     puts "not doing anything" 
    end 
end 

을의 출력과 ? 내가 만든 WhatImDoing 개체의 참조 위치입니까? 이 위치 (예 : 포인터 또는 무언가)를 통해 객체에 액세스 할 수 있습니까? 등 ... 그냥 일반적으로 루비에 대한 더 나은 이해를 얻으려고합니다.

감사합니다.

+0

언급하는 것을 잊어 버렸습니다. 내가 그 위치의 포인터를 통해 액세스 할 수 있는지 궁금합니다. – will

+0

질문 편집; 코멘트를 질문으로 추가하지 마십시오. 내 대답은 그 가치와 함께해야 할 일을 설명합니다. Ruby에는 객체에 대한 참조가 아니라 "포인터"가 없습니다. –

답변

6

두 번째 줄은 irb의 출력이며 마지막 문장의 반환 값을 보여줍니다. 그 값과 같은 무언가를 설정하면

:

> class WhatImDoing 
    def initialize 
     puts "not doing anything" 
    end 

    def ohai 
     puts "Ohai" 
    end 
    end 
> tmp = WhatImDoing.new 
=> #<WhatImDoing:0x5cd5a2a9> 

당신은 그것을 사용할 수 있습니다 사용자 정의 to_s이 있다면

> tmp.ohai 
Ohai 

이 대신 것을 보여줄 것입니다 :

> class WhatImDoing 
    def to_s 
     "#{super} kthxbai" 
    end 
    endt 
> tmp = WhatImDoing.new 
=> #<WhatImDoing:0x3e389405> kthxbai 
2

예, 만들고있는 개체에 대한 참조입니다. 예, 해당 개체에 액세스 할 수 있습니다.

3

나는 그것이 irb의 출력이라고 가정하고 있습니다. Irb가 개체를 인쇄하려고했습니다. 즉, 개체를 문자열로 변환하려고 시도했습니다. 당신이 방법 ("문자열") 사용자 정의 그리고 to_s를 제공하지 않았기 때문에, 개체는이 하나를 상속 :

http://ruby-doc.org/core-1.9.3/Object.html#method-i-to_s

가 OBJ를 나타내는 캐릭터 라인을 돌려줍니다. 기본값 to_s는 객체의 클래스와 객체 id의 인코딩을 인쇄합니다. 특별한 경우로, 루비 프로그램의 초기 실행 컨텍스트는 최상위 객체는 "주."를 반환 또한 소스 코드에 파고

는 16 진수가 참이라고 밝혀,에 의해 점유 된 메모리 주소를 그 객체 인스턴스. Ruby에서 그 정보로 할 수있는 일은 정말 멋진 것이 아닙니다. 객체 인스턴스의 고유 식별자를 생성하는 편리한 방법 일뿐입니다.

+0

(해당 숫자의 "의미"는 구현에 따라 다르지만) –

+0

예, 가상 메모리를 고려합니다. 그것은 C에서 포인터 값입니다 (sprintf의 % p). – theglauber

+0

VM도 VM에 들어 가지 않습니다. Ruby 구현은 객체가 어디에 있는지, 또는 객체가 인간이 읽을 수있는 것으로 해석하는지 등을 식별하고자 할 때 사용할 수 있습니다. 객체 ID는 단순히 내부 색인을 가리키는 증가 색인 일 수 있습니다. 매핑 테이블. 필자의 요지는 "소스를 파고 들다"는 것은 하나의 특정 구현에만 관련이 있으며 구현간에 * 매우 다를 수 있다는 것입니다. 여러분이보고있는 구현의 이름을 지정하는 것이 중요합니다. –