2012-11-26 3 views
0

나는 방법이 정의가 최상위 수준에 수행 될 때 루비에 정의 된 위치를보고 확인하고 있었고, 그 결과는 놀라운 :main에서 메소드를 정의하는 것이 왜 Object 및 main.singleton_class에 정의되어 있습니까?

def foo; end 

singleton_class != Object # => true 
self.class == Object  # => true 

m1 = singleton_class.instance_method :foo 
# => #<UnboundMethod: Object#foo> 

m2 = Object.instance_method :foo 
# => #<UnboundMethod: Object#foo> 

m1 == m2     # => true 

그것은 foo 동시에 두 클래스에 정의되어 보인다! 설명이 있습니까?

답변

0

질문은 실제로 말이되지 않습니다. 메서드는 Object에 정의되어 있습니다. 하나는 물론, 싱글 톤 클래스를 통해 그것을 얻을 수 있지만,이 정의되어 있지 않습니다 ...

singleton_class.instance_methods(false).grep /foo/ # => [] 

한숨

관련 문제