![](/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.