【问题标题】:Ruby's to_s method question (from Axe book 2nd edition)Ruby 的 to_s 方法问题(来自 Axe book 2nd edition)
【发布时间】:2010-04-12 20:13:55
【问题描述】:

根据斧头书(第2版),我们可以使用to_s如下。

班歌 def to_s “歌曲” 结尾 结尾 歌曲 = Song.new() 歌曲.to_s

但是,它没有给我任何东西,为了将某些东西打印到标准输出,我应该运行

def to_s p“歌” 结尾

自本书编写时的 ruby​​ 1.8.2 以来有什么变化吗? 我的 ruby​​ 版本信息是 1.8.7 for Mac。

ruby 1.8.7 (2009-06-08 patchlevel 173) [universal-darwin10.0]

【问题讨论】:

    标签: ruby printing


    【解决方案1】:

    Pickaxe 书使用常见的符号,例如

    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
    

    【讨论】:

      【解决方案2】:

      该示例可能需要输入到像irb 这样的 REPL 中,如下所示:

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

      【讨论】:

        【解决方案3】:

        在你的情况下,你希望你的最后几行是:

        song = Song.new
        puts song.to_s
        

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            【解决方案5】:

            这是因为上面的方法只是简单地返回“song”,并没有打印出来。您的程序应该自己进行打印。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2019-12-29
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-11-05
              • 1970-01-01
              • 2011-09-19
              • 1970-01-01
              相关资源
              最近更新 更多