Ruby在创建对象时自动调用to_s方法

时间:2012-08-20 15:24:51

标签: ruby ruby-1.9.3

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方法中写入put,为什么输出打印。

3 个答案:

答案 0 :(得分:7)

您将其发送给putsto_s会尝试使用puts A.new("hello world", 5).to_a将对象渲染为字符串。

如果您将最后一行更改为:to_s,则会在返回的数组上调用to_s,而不会调用A {{1}}。

答案 1 :(得分:0)

除了@ numbers1311407回答

每当您尝试irb

中的任何代码时

隐含地调用to_s

和@ numbers1311407答案解释。

隐式调用to_s

答案 2 :(得分:0)

puts通常会打印在对象上应用to_s的结果 了解更多 here