2010-08-24 5 views
1

Похоже, что в ruby ​​1.9.2, если to_s определено, проверка вернется to_s ?? Почему это изменится?Почему изменилось поведение to_s в Ruby 1.9.2?

Это:

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 

ответ

3

Объект # инспектировать будет вызывать 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 
+2

Возможно, вы имели в виду «Я запустил вашу программу на 1.9.2 и 1.8.7» или «1.9.2 и 1.9.1»? –

+0

Я только что протестировал его в 1.8.7, и результаты остались прежними. Если только 'to_s' переопределяется,' inspect' вызовет это. – Chuck

+0

К сожалению, я вставил неправильный выход программы. Я обновлю это. – AboutRuby

Смежные вопросы