为什么 `p` 和 `puts` 给出相同的输出?都在调用 `to_s` 吗?
Why do `p` and `puts` give the same output? Are both calling `to_s`?
在下面的代码中,p
和 puts
给出相同的输出。
class Book
def initialize(title, price)
@title = title
@price = price
end
def to_s
"book with title=#{@title} and price=#{@price}"
end
end
book1 = Book.new("Book of Ruby", 50.63)
puts book1 # => book with title=Book of Ruby and price=50.63
p book1 # => book with title=Book of Ruby and price=50.63
为什么会这样? p
应该调用 book1.inspect
而不是 book1.to_s
。
在ruby 1.9 中,inspect
的默认行为是调用to_s
。这在以后的版本中发生了变化。如果您想要不同的输出,您可能必须覆盖 inspect
和 to_s
,或者升级您的 ruby 版本。
看这里:http://ruby-doc.org/core-1.9.3/Object.html#method-i-inspect
If not overridden, uses the to_s method to generate the string.
在下面的代码中,p
和 puts
给出相同的输出。
class Book
def initialize(title, price)
@title = title
@price = price
end
def to_s
"book with title=#{@title} and price=#{@price}"
end
end
book1 = Book.new("Book of Ruby", 50.63)
puts book1 # => book with title=Book of Ruby and price=50.63
p book1 # => book with title=Book of Ruby and price=50.63
为什么会这样? p
应该调用 book1.inspect
而不是 book1.to_s
。
在ruby 1.9 中,inspect
的默认行为是调用to_s
。这在以后的版本中发生了变化。如果您想要不同的输出,您可能必须覆盖 inspect
和 to_s
,或者升级您的 ruby 版本。
看这里:http://ruby-doc.org/core-1.9.3/Object.html#method-i-inspect
If not overridden, uses the to_s method to generate the string.