Ruby中的__repr__对应是什么?

14 投票
2 回答
5142 浏览
提问于 2025-04-15 21:31

Python中的__repr__函数很特别,因为当你用print输出一个对象时,它会自动被调用。

在Ruby中有没有类似的东西呢?我以为是to_s方法,但我发现用p输出对象时似乎并没有调用to_s方法。

补充说明

我搞错了,p输出对象时其实是调用了to_s方法,具体情况如下。 我从我之前提问的答案中得到了些提示。 - Ruby的to_s方法问题(来自Axe书第二版)

# 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

2 个回答

3

p 对象使用 #inspect 方法。

20
  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.’‘

来源

撰写回答