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?
有点害羞的细节,但看起来它正在做你告诉它的.
表达式Units new返回一个新Units实例,然后发送fromString:给它.你已经实现了返回发送结果subclassResponsibility.
如果Units真的是一个抽象类,我不会指望你实例化它(你通常不会发送new给抽象类,除非你也搞乱了它的行为new).
所以我希望你做的事情如下:
unit := (YourRealSubclass new fromString: aString)
Run Code Online (Sandbox Code Playgroud)
这YourRealSubclass有一个真正的实现fromString: