나는 어딘가에 메모를 놓쳤다. 나는 이것을 설명해주기를 바란다.eigenclass가 self.class와 동일하지 않은 이유는 무엇입니까?
왜 객체의 고유 클래스가 self.class
과 다른가요?
class Foo
def initialize(symbol)
eigenclass = class << self
self
end
eigenclass.class_eval do
attr_accessor symbol
end
end
end
class.self
으로 eigenclass을 동일시 논리의 나의 기차는 오히려 간단하다
class << self
는 클래스 메소드가 아닌 인스턴스 메소드를 선언하는 방법입니다. def Foo.bar
의 바로 가기입니다.
따라서 클래스 개체에 대한 참조 내에서 self
을 반환하는 것은 self.class
과 동일해야합니다. 이는 class << self
이 클래스 메소드/속성의 정의에 대해 self
을 Foo.class
으로 설정하기 때문입니다.
그냥 혼란 스럽습니까? 아니면 Ruby 메타 프로그래밍에 대한 비열한 속임수입니까?
그래서 다음 각 인스턴스가 생성 된 클래스의 익명의 하위 클래스에 미묘한을 설명 꽤 좋은 일을? –
각 인스턴스의 * class *는 생성 된 클래스의 익명 하위 클래스입니다. f1의 클래스는 Foo의 익명 하위 클래스이고 Foo의 클래스는 Class의 익명 하위 클래스입니다. –
멋진 답변 :) 많은 사람들이 당신만큼이나 분명히 이것을 이해하지 못합니다. – horseyguy