2013-06-20 4 views
1

подклассResponsibility селектор отправителей застревает, даже если подклассы имеют реализованный метод.subclassResponsibility отправитель селектор застрял

Я думаю, что аргумент может привести к тому, что это произойдет, но так ли?

и может ли кто-нибудь сказать нам, почему?

в абстрактном классе, у нас есть этот

fromString: aString 
    "init with a string" 

    ^self subclassResponsibility 

и я бегу это:

unit := (Units new fromString: aString) 

тогда происходит ошибка.

В каких Единицами является абстрактный класс. Существующий подход

Трэвис Григгс мог устранить ошибку еще

есть doubledispatch для метода создания экземпляра?

ответ

6

Вид застенчивого деталя, но похоже, что он делает именно то, что вы ему сказали.

Выражение Units new вернуло новый экземпляр Units, а затем вы отправили fromString:. Который вы реализовали, чтобы вернуть результат отправки subclassResponsibility.

Если Units были действительно абстрактных класса, я бы не ожидал, что вы его экземпляра (вы вообще не посылать new на абстрактные классы, если вы не также баловаться с поведением new).

Так что я ожидал бы вы сделать что-то вроде:

unit := (YourRealSubclass new fromString: aString) 

И YourRealSubclass имеет реальное осуществление fromString:

 Смежные вопросы

  • Нет связанных вопросов^_^