Ruby的方法问题(摘自Axe图书第二版)

Ruby的方法问题(摘自Axe图书第二版),ruby,printing,Ruby,Printing,根据axe book第二版,我们可以使用以下内容 class Song def to_s "Song" end end song = Song.new() song.to_s 但是,它没有给我任何东西,为了打印一些东西到标准输出,我应该运行 def to_s p "Song" end 这本书是为ruby 1.8.2编写的,自那以后有什么变化吗? 我的ruby版本信息是Mac版的1.8.7 ruby 1.8.7 2009-06-08补丁级别173[通用-达尔文1

根据axe book第二版,我们可以使用以下内容

class Song def to_s "Song" end end song = Song.new() song.to_s 但是,它没有给我任何东西,为了打印一些东西到标准输出,我应该运行

def to_s p "Song" end 这本书是为ruby 1.8.2编写的,自那以后有什么变化吗? 我的ruby版本信息是Mac版的1.8.7

ruby 1.8.7 2009-06-08补丁级别173[通用-达尔文10.0]

对,to__s总是将对象转换为字符串。然后由您的程序使用该字符串-例如,将其写入标准输出。

对,to\s始终将对象转换为字符串。然后由您的程序使用该字符串-例如,将其写入标准输出。

这是因为上述方法只返回歌曲,而不打印歌曲。你的程序应该自己打印

这是因为上述方法只返回歌曲,而不打印歌曲。你的程序应该自己打印

在您的情况下,您希望最后一行是:

song = Song.new
puts song.to_s

在您的情况下,您希望最后一行是:

song = Song.new
puts song.to_s

该示例可能被输入到类似irb的REPL中,如下所示:

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

该示例可能被输入到类似irb的REPL中,如下所示:

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

鹤嘴锄手册使用了一种常见的符号,例如

宋·托斯→ 歌曲:我的路西纳特拉225

表示这首歌:我的方式,西纳特拉225是左边表达式的值。但是,除非您明确使用puts,否则它不会打印出来

对象上to_的适当实现将返回该对象的字符串表示形式,例如人名或博客文章的标题和ID,但实际上不会产生任何副作用,例如输出内容

如果您使用irb,交互式Ruby解释器将为您打印每个表达式的值,而无需显式puts。e、 g


鹤嘴锄手册使用了一种常见的符号,例如

宋·托斯→ 歌曲:我的路西纳特拉225

表示这首歌:我的方式,西纳特拉225是左边表达式的值。但是,除非您明确使用puts,否则它不会打印出来

对象上to_的适当实现将返回该对象的字符串表示形式,例如人名或博客文章的标题和ID,但实际上不会产生任何副作用,例如输出内容

如果您使用irb,交互式Ruby解释器将为您打印每个表达式的值,而无需显式puts。e、 g