2010-04-12 3 views
1

ax book (제 2 판)에 따르면 다음과 같이 to_s를 사용할 수 있습니다.루비의 to_s 방법 질문 (Axe 책 2 판에서)

 
class Song 
    def to_s 
    "Song" 
    end 
end 

song = Song.new() 
song.to_s 

, 그것은 책이 있었다 루비 1.8.2 이후 어떤 변화가 표준 출력에 무언가를 인쇄하기 위해, 내가

 
    def to_s 
    p "Song" 
    end 

를 실행해야합니다, 나에게 아무것도 제공하지 않습니다 쓴거야? 내 루비 버전 정보는 Mac의 경우 1.8.7입니다.

루비 1.8.7 (2009-06-08 패치 레벨 173) 보편적-darwin10.0은]

답변

2

Pickaxe 책은 다음과 같은 일반적인 표기법을 사용합니다. "Song: My Way--Sinatra (225)"

song.to_s

"Song: My Way--Sinatra (225)"는 좌측의 식의 값에 있음을 나타낸다. 그러나 명시 적으로 puts을 사용하지 않으면 인쇄되지 않습니다.

개체에 대해 to_s을 적절히 구현하면 해당 개체의 문자열 표현 (예 : 사람 이름 또는 블로그 게시물의 제목 및 ID)이 반환되지만 실제로는 부작용이 없습니다 (예 :

irb를 사용하면 대화 형 Ruby 인터프리터는 명시 적으로 puts없이 각 표현식의 값을 출력합니다. 예 :

$ irb 
irb(main):001:0> 2 + 2 
=> 4 
0

오른쪽, to_s는 객체를 문자열로 변환 항상있다. 예를 들어 stdout에 쓰는 것과 같이 문자열을 사용하는 것은 프로그램에 달려 있습니다.

0

위의 방법은 단순히 "노래"를 반환하기 때문에 인쇄하지 않습니다. 프로그램 자체에서 인쇄 작업을 수행해야합니다. 귀하의 경우에는

1

당신이 당신의 마지막 선이 원하는 것 : 같을 것이다 예를 irb 같은 REPL에 입력하기위한 것 하심

song = Song.new 
puts song.to_s 
2

:

irb> class Song 
    .. def to_s 
    ..  "Song" 
    .. end 
    .. end 
    => nil 
irb> song = Song.new() 
    => Song 
irb> song.to_s 
    => "Song"