2
class A
  def initialize(string, number)
    @string = string
    @number = number
  end

  def to_s
    "In to_s:\n   #{@string}, #{@number}\n"
  end
  def to_a
    "In to_a:\n   #{@string}, #{@number}\n"
  end
end
puts a = A.new("hello world", 5)

输出是

 In to_s:
   hello world, 5

该方法是如何to_s自动调用的?

为什么不自动调用另一种方法,例如to_a

既然我没有在to_s方法中写puts,为什么要打印输出。

4

3 回答 3

7

您将其发送到puts,它将尝试使用 将对象呈现为字符串to_s

如果您将最后一行更改为: puts A.new("hello world", 5).to_a,它将改为调用to_s返回的 Array 而to_s不会调用A。

于 2012-08-20T15:26:23.333 回答
1

puts通常打印在to_s对象 上应用的结果在此处阅读更多内容

于 2013-11-03T08:40:38.963 回答
0

除了@numbers1311407 回答

每当您尝试任何代码时irb

to_s它隐式调用。

正如@numbers1311407 回答所解释的那样。

to_s隐式调用

于 2012-08-20T15:47:03.650 回答