2010-04-12 15 views
1

根據斧頭書(第2版),能使用to_s如下。紅寶石的to_s方法問題(從Axe書第2版)

 
class Song 
    def to_s 
    "Song" 
    end 
end 

song = Song.new() 
song.to_s 

但是,它並沒有給我什麼,爲了打印一些東西到標準輸出,我應該運行

 
    def to_s 
    p "Song" 
    end 

以後,有紅寶石1.8.2當這本書是任何變化寫爲? 我的紅寶石版本信息是Mac 1.8.7。

紅寶石1.8.7(2009-06-08 PATCHLEVEL 173)[萬向darwin10.0]

回答

2

鎬書使用例如一個共同的符號

song.to_s"Song: My Way--Sinatra (225)"

以指示"Song: My Way--Sinatra (225)"是左邊的表達式的值。但是,除非您明確使用puts,否則不會打印出來。

在對象上適當實現to_s將返回該對象的字符串表示形式(例如,某個人的名稱或博客文章的標題和ID),但實際上本身不會有任何副作用(例如輸出的東西)。

如果您使用irb,交互式Ruby解釋器它打印出每個表達式的值爲您沒有明確puts。例如

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

右,to_s始終只是轉換的對象爲字符串。這取決於您的程序使用該字符串 - 例如,通過將其寫入標準輸出。

0

這是因爲上述方法只是返回「歌曲」,它不會打印它。你的程序應該自己完成打印。

1

在你的情況,你會希望你的最後一行是:

song = Song.new 
puts song.to_s 
2

這個例子可能意味着要鍵入像irb一個REPL,這將是這樣的:

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