繁体   English   中英

为什么`p`和`puts'给出相同的输出? 都在调用`to_s`吗?

[英]Why do `p` and `puts` give the same output? Are both calling `to_s`?

在以下代码中, pputs给出相同的输出。

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

如果未覆盖,则使用to_s方法生成字符串。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM