在以下代码中,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
。
答案 0 :(得分:3)
在ruby 1.9中,to_s
的默认行为是调用inspect
。这在以后的版本中已更改。如果您想要不同的输出,或者只是升级您的ruby版本,您可能必须覆盖to_s
以及iex (30)> Enum.reduce([1,2,3,4], &(IO.puts("a#{&1} b#{&2}")))
a2 b1
a3 bok
a4 bok
。
见这里:http://ruby-doc.org/core-1.9.3/Object.html#method-i-inspect
如果未覆盖,则使用to_s方法生成字符串。