2013-05-07 2 views
1

런타임 중에 클래스 메서드를 squeak에 추가하고 싶습니다. Behavior 클래스에 정의 된 메서드 컴파일이 있지만이 메서드는 원하는 새 메서드를 Instance 메서드 클래스에 추가합니다. 클래스 메소드에 컴파일하는 방법이 있나요? (그래서 클래스에 대해 정의 된 메소드가 될 것이고 클래스의 인스턴스에는 정의되지 않을 것입니다).런타임에 squeak의 클래스 메서드 컴파일

감사합니다.

답변

2

모든 클래스 자체가 개체이므로 클래스 자체에도 클래스가 있습니다. 이 클래스는 Metaclass의 인스턴스이며, Behavior에서 상속됩니다. 따라서 인스턴스 메소드의 클래스 에서처럼 클래스 메소드에 대해 클래스의 클래스에 #compile:을 사용할 수 있습니다.

간단한 예 :

Number에서 인스턴스있어서

Number compile: 
'succ 
^self + 1 
' 

클래스 메소드에 Number class :

Number class compile: 
'one 
    ^self zero + 1 
' 
관련 문제