2010-08-24 7 views
1

On dirait que dans ruby ​​1.9.2 si to_s est défini, inspect retournera à_s ?? Pourquoi cela changerait-il?Pourquoi to_s dans Ruby 1.9.2 at-il changé de comportement?

Ce:

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 

sorties: ce

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

Répondre

3

# Object inspectent appellera to_s le cas échéant. Je ne pense pas que le comportement a changé.

J'ai exécuté votre programme sur 1.9.2 et 1.8.7 et ne voyez aucune différence.

$ 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 
+2

Voulez-vous dire "J'ai lancé votre programme sur 1.9.2 et 1.8.7" ou "1.9.2 et 1.9.1"? –

+0

Je viens de le tester en 1.8.7 et les résultats sont les mêmes. Si seulement 'to_s' est surchargé,' inspect' l'appellera. – Chuck

+0

Oups, j'ai collé la mauvaise sortie du programme. Je vais mettre à jour ça. – AboutRuby

Questions connexes