簡體   English   中英

為什么Ruby 1.9.2中的to_s會改變行為?

[英]Why did to_s in Ruby 1.9.2 change behavior?

看起來在ruby 1.9.2中,如果定義了to_s,inspect將返回to_s? 為什么會改變?

這個:

class ToSClass
  def to_s
    "#{self.class.name} to_s called"
  end
end
class InspectClass
  def inspect
    "#{self.class.name} inspect called"
  end
end
class BothClass
  def inspect
    "#{self.class.name} inspect called"
  end
  def to_s
    "#{self.class.name} to_s called"
  end
end

c1 = ToSClass.new
puts c1.inspect
puts c1.to_s
c1 = InspectClass.new
puts c1.inspect
puts c1.to_s
c1 = BothClass.new
puts c1.inspect
puts c1.to_s

輸出此:

ToSClass to_s called
ToSClass to_s called
InspectClass inspect called
#<InspectClass:0x316baf8>
BothClass inspect called
BothClass to_s called

Object#inspect將調用to_s(如果可用)。 我認為行為沒有改變。

我已經在1.9.2和1.8.7上運行了您的程序,沒有發現任何區別。

$ rvm inspect.rb 1.9.2,1.9.1,1.8.7

info: 1.9.2 (ruby-1.9.2-p0): ruby 1.9.2p0 (2010-08-18 revision 29036) [x86_64-linux] 

ToSClass to_s called
ToSClass to_s called
InspectClass inspect called
#<InspectClass:0x00000001941c80>
BothClass inspect called
BothClass to_s called

info: 1.9.1 (ruby-1.9.1-p378): ruby 1.9.1p378 (2010-01-10 revision 26273) [x86_64-linux] 

ToSClass to_s called
ToSClass to_s called
InspectClass inspect called
#<InspectClass:0x000000011594b8>
BothClass inspect called
BothClass to_s called

info: 1.8.7 (ruby-1.8.7-p302): ruby 1.8.7 (2010-08-16 patchlevel 302) [x86_64-linux] 

ToSClass to_s called
ToSClass to_s called
InspectClass inspect called
#<InspectClass:0x7ffd795afd60>
BothClass inspect called
BothClass to_s called

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM