상속 된 익명 클래스의 name
을 얻을 가능성이 있으며 "실패 A"를 발생시키지 않습니까? Class
개체 생성을 통해 이루어져야합니다 (평가 또는 유사하지 않음). 이 특정 상수로 설정 될 수 없도록 익명의 클래스가 아직 초기화되지 않기 때문에상속 된 프로세스에서 익명 클래스의 이름을 가져옵니다.
class A
def self.inherited(base)
raise 'fail A' unless base.name
end
end
B = Class.new(A)
# or
Object.const_set :B, Class.new(A)
위의 코드는 작동하지 않습니다. 이 상수 (예를 들어, (B = Class.new).name #=> "B"
)에 할당 된 때까지
네, 그렇습니다.하지만 해킹이있을 수 있습니다. 나는'def self.name;을 정의하려고 시도했다. '비'; end'를 블록에 넣었습니다. 왜냐하면 먼저 이름 클래스 메소드를 정의하고 상속 된 메소드를 호출 할 것이기 때문입니다. 그리고 그 행동은 정말로 이상합니다. –
메소드 정의가있는 블록이 평가되기 전에 위와 같이 후크가 호출되므로 메소드가 아직 존재하지 않기 때문에 작동하지 않습니다. –