2017-12-19 4 views
1

私は2クラスインスタンスのバリアブルを持って作成した新しいクラスに新しいサブクラスメソッドを作成する必要があります:isInterfaceとbehavesLike。 私はこのパラメータも取得し、thosパラメータで新しいサブクラスを作成するサブクラスメソッドを作成する必要があります。 私はちょうどここで間違って何を得ることができません。 これは私のコードです:私はちょうどこれらのエラーを得続けるsqueakのサブクラスメソッドをオーバーライドする

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). 

:あなたは、クラスとインスタンスレベル、非常に頻繁に問題を混合している

答えて

1

クラスはインスタンスを作成する成果物です。そして、instVarsは、正確にはインスタンスにあります。 Mクラスがクラスであるため、クラスのインスタンスVARを設定するために、あなたのケースで 、

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

試みます。インスタンスが必要な場合、mクラス自体はクラスであるため、mクラスは新しいクラスと話すべきですが、さらに悪いことに、mクラスはメタクラスです。この混乱をすべて理解するには、Blue Bookのメタクラスに関する章を読んでください。 コードを修正するには、m classの代わりにm newを使用してください。

関連する問題