하자의 오픈 클래스 Module
하고 여기에 메소드를 추가 :이 작업을 수행하여이 메소드를 호출 할 수 있습니다클래스, 모듈, 자신의 eigenclasses, 및 방법 조회
class Module
def foo
puts "phew"
end
end
,
Class.foo
이해할 수있다 Class
의 클래스가 Class
이고 그 슈퍼 클래스가 Module
이기 때문에 따라서 Module
에 정의 된 인스턴스 메소드를 호출 할 수 있습니다.
이제 방법은 아래 bar
은 Module
의 eigenclass에 정의됩니다
class Module
def self.bar
puts "bar"
end
end
하지만 지금
Class.bar
도 작동합니다.
누군가 Class
이 Module
의 고유 클래스에서 메소드에 액세스하는 방법을 설명 할 수 있습니까?
나는 지금 생각합니다. 메소드 검색은 이전에 설명했던 방식대로 작동하지 않습니다. 내가 Class.foo
을 할 때, 그 방법은 Class
의 eigenclass에서 찾은 다음, 수퍼 클래스 인 Module
의 고유 클래스 BasicObject
의 eigenclass까지 (그것이 자신의 꼬리를 먹는 뱀처럼) 자신을 켠다. 방법에 대한 Class
(Class
은 BasicObject
의 고유 클래스의 수퍼 클래스이므로) 수퍼 클래스 Module
으로 이동하여 메서드를 찾습니다.
마찬가지로, Class.bar
일 때 Class
의 고유 클래스에서 메소드를 검색 한 다음 Module
의 고유 클래스에서 메소드를 검색합니다.
내가
class Class
def check
puts "class instance method"
end
end
및
class Module
def self.check
puts "modules eigenclass method"
end
def check
puts "module instance method"
end
end
추측 WOT을 수행 할 때 내가 할 때 출력 :
Class.check
이 내 현재의 이해입니다 :
관련 토론 유용한 정보 : https : // stackoverflow.com/questions/13269271/why-a-modules-singleton-method-is-visible-in-downstream-eigenclasses- 여기서 –