subclassResponsibility发送者选择器卡住了

mar*_*ver 1 smalltalk squeak pharo

子类责任发送者选择器即使在子类具有实现方法时也会卡住.

我认为这个论点可能会导致这种情况发生,但是呢?

谁能告诉我们为什么?

在抽象类中我们有这个

fromString: aString
    "init with a string"

    ^self subclassResponsibility
Run Code Online (Sandbox Code Playgroud)

我正在运行这个:

unit := (Units new fromString: aString)
Run Code Online (Sandbox Code Playgroud)

然后发生错误.

其中Units是抽象类.

Travis Griggs目前的方法可以消除错误

是否有实例创建方法的doubledispatch?

Tra*_*ggs 6

有点害羞的细节,但看起来它正在做你告诉它的.

表达式Units new返回一个新Units实例,然后发送fromString:给它.你已经实现了返回发送结果subclassResponsibility.

如果Units真的是一个抽象类,我不会指望你实例化它(你通常不会发送new给抽象类,除非你也搞乱了它的行为new).

所以我希望你做的事情如下:

unit := (YourRealSubclass new fromString: aString)
Run Code Online (Sandbox Code Playgroud)

YourRealSubclass有一个真正的实现fromString: