【问题标题】:What's the __repr__ equivalence in ruby?ruby 中的 __repr__ 等价是什么?
【发布时间】:2010-04-12 20:19:23
【问题描述】:

python的__repr__函数很花哨,它是在自动使用print OBJECT时调用的。

它有红宝石等价物吗?我以为是 to_s,但是,我有 p OBJECT 似乎没有调用 to_s 方法。

添加

我搞错了,p OBJECT 似乎调用 to_s 方法如下。 我从另一个问题的答案中得到了一些提示。 - Ruby's to_s method question (from Axe book 2nd edition)

# Sample code from Programing Ruby, page 24
class Song
  def to_s
    "Song"
  end
end

class Songson < Song
  def to_s
    super + "<Songson>"
  end
end

song = Songson.new()
p song

【问题讨论】:

    标签: python ruby


    【解决方案1】:
      obj.inspect => string
    

    返回一个字符串,其中包含obj 的人类可读表示。 如果未覆盖,则使用to_s 方法生成字符串。

       [ 1, 2, 3..4, 'five' ].inspect   #=> "[1, 2, 3..4, \"five\"]"
       Time.new.inspect                 #=> "Wed Apr 09 08:54:39 CDT 2003"
    

     obj.to_s => string
    

    返回一个表示obj 的字符串。默认的 to_s 打印对象的类和对象 id 的编码。作为一种特殊情况,作为 Ruby 程序初始执行上下文的顶级对象返回“main”。

    source

    【讨论】:

    • @TheMachineCharmer:你能检查我的另一个问题 - stackoverflow.com/questions/2625667/… 吗? >
    • Inspect - 如果没有被覆盖,使用 to_s 方法生成字符串。---完全正确。 @prosseek - 尝试编写一个简单的类并执行 to_s 并检查其实例 - 两者都将返回相同的结果。 inspect 已在 Array,Hash 等预定义类上被覆盖......这就是它们打印不同的原因。
    【解决方案2】:

    p 对象使用#inspect。

    【讨论】:

      猜你喜欢
      • 2011-03-16
      • 1970-01-01
      • 2011-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-29
      • 2011-05-25
      相关资源
      最近更新 更多