簡體   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