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,为什么输出打印。
答案 0 :(得分:7)
您将其发送给puts
,to_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