繁体   English   中英

Smalltalk中“重载”方法是否根据参数的类?

[英]“Overloading” method in Smalltalk according to parameter's class?

我知道您无法根据参数的类在Smalltalk中重载方法。 我剩下这个设计问题:

我有三类:一类实现邮件,一类实现句子,一类实现Word。 这三个类都有一个名为addContent的方法,该方法接收String作为参数。 Mail和Sentence具有另一种称为addContent的方法来接收Word,而Mail具有另一种addContent来接收句子。 一方面,它们都具有一个名为returnAsString的方法,该方法以字符串形式返回内容。

我有以下可能性:

  • 通过依赖关系实现它们:Mail具有Sentence的集合,而Sentence具有Word的集合(而Word仅具有字符串)。 然后可以通过要求参数以字符串形式返回其内容来实现addContent,并使对象的属性使用addContent(String)进行加载。 我发现这种方法的问题是,我必须为String对象添加一个方法以将自身返回为String,其余的方法应该为returnAsString

  • 使它们全部继承一个基本抽象类。 我只是不知道这将如何工作,因为我还将使Word具有通过句子添加内容的方法,这是错误的。

有任何想法吗?

谢谢

您的朋友是Double Dispatch

您将必须在Mail,Sentence和Word的每个类上添加专门的addContent:方法。 我给您结合Mail和String的示例。

Mail >> addContent: content
    content addToMail: self

String  >> addToMail: mail
    mail addStringContent: self

Mail >> addStringContent: aString
   "here you have the explicit type encoded in the selector"
   self todo: 'Add a string to the mail"

同样,您可以修复将字符串添加到句子,单词添加到句子以及句子添加到邮件的组合。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM