Smalltalk 子责任发送器选择器卡滞

Smalltalk 子责任发送器选择器卡滞,smalltalk,pharo,squeak,Smalltalk,Pharo,Squeak,SubassResponsibility发送器选择器即使在子类实现了该方法时也会卡住 我认为这场争论可能会导致这种情况发生,但这是真的吗 谁能告诉我们为什么 在抽象类中,我们有这个 fromString: aString "init with a string" ^self subclassResponsibility 我正在运行这个: unit := (Units new fromString: aString) 然后发生错误 其中单位是抽象类 特拉维斯·格里格斯目前的方

SubassResponsibility发送器选择器即使在子类实现了该方法时也会卡住

我认为这场争论可能会导致这种情况发生,但这是真的吗

谁能告诉我们为什么

在抽象类中,我们有这个

fromString: aString
    "init with a string"

    ^self subclassResponsibility
我正在运行这个:

unit := (Units new fromString: aString)
然后发生错误

其中单位是抽象类

特拉维斯·格里格斯目前的方法可以消除这个错误


实例创建方法是否存在doubledispatch

在细节上有点害羞,但看起来它正按照你告诉它的那样做

表达式Units new返回了一个新的Units实例,然后您将fromString:发送给该实例。您已经实现了它来返回发送SubassResponsibility的结果

如果单元真的是一个抽象类,我就不会期望你实例化它——你通常不会向抽象类发送新的,除非你也在处理新的行为

所以我希望你能做一些类似的事情:

unit := (YourRealSubclass new fromString: aString)

YourRealSubclass有一个真正的fromString实现:

对于上面的细节有点害羞,但看起来它正按照您告诉它的那样做

表达式Units new返回了一个新的Units实例,然后您将fromString:发送给该实例。您已经实现了它来返回发送SubassResponsibility的结果

如果单元真的是一个抽象类,我就不会期望你实例化它——你通常不会向抽象类发送新的,除非你也在处理新的行为

所以我希望你能做一些类似的事情:

unit := (YourRealSubclass new fromString: aString)
YourRealSubclass有一个真正的fromString实现: