![](/img/trans.png)
[英]How to print a string that is sent as a parameter to class method in 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.