2010-08-24 2 views
1

루비 1.9.2 에서처럼 to_s가 정의되어 있으면 inspect는 to_s ??를 반환합니다. 왜 이렇게 바뀔까요? Ruby 1.9.2에서 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 

답변

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

관련 문제