2017-12-19 3 views
1

Ich muss eine neue Unterklasse-Methode zu einer neuen Klassen, die ich erstellt, die 2 Klasse Instanz Varribles: isInterface und behavesLike. Ich muss eine Unterklasse Methode machen, die auch diese Parameter bekommt und eine neue Unterklasse mit diesen Parametern erstellt. ich kann einfach nicht bekommen, was mache ich hier falsch. dies ist mein Code:Override Unterklasse Methode in Quietschen

subclass: aSubclassName isInterface: isInterface behavesLike: 
    aCollection instanceVariableNames: instVarNames classVariableNames: 
    classVarNames poolDictionaries: poolDictionaries category:aCategoryName 
|m| 
    m:=(super subclass: aSubclassName 
     instanceVariableNames: instVarNames 
     classVariableNames:classVarNames 
     poolDictionaries: poolDictionaries 
     category: aCategoryName). 
(m class) instVarNamed:'behavesLike' put:aCollection;instVarNamed:'isInterface' put:isInterface 
      ^(m class). 

ich nur halten diese Fehler bekommen:

Antwort

1

Sie mischen Klassen- und Instanzebene, eine sehr häufige Frage.

Klassen sind Artefakte, die Instanzen erstellen. Und instVars sind genau in den Instanzen. In Ihrem Fall

(m class) instVarNamed:'behavesLike' put:aCollection

versucht die Instanz var eine Klasse zu setzen, weil m-Klasse eine Klasse ist. Wenn Sie eine Instanz wollen, sollten Sie mit m class new sprechen, aber noch schlimmer, weil m selbst eine Klasse ist, also m class ist eine Metaklasse. Um all diese Verwirrung zu verstehen, sollten Sie die Kapitel über Metaklassen im Blue Book lesen. Aber um Ihren Code zu beheben, sollte m new anstelle von m class funktionieren