0
只是在概念庫的證明工作。試圖在可能的情況下進行抽象並且混合使用特徵而不是繼承,對於這個庫來說,實際上只有Character的所有實例之間有一個共同的特徵,就是沒有任何類對象只是混入來構建一個case對象的特徵。試着做一個聰明的toString實現,它能夠識別我混入的特性並相應地改變toString。我目前的理論是有這樣的事情:基礎toString什麼特性混合在
//Completely wrong, just a rough pseudocode of one potential ideal
implicit class CharImpl[A <: Character](a: A){
def toString:String = {
for(
i ← _:HasName ⇒ s"Name: ${a.name}"
j ← _:HasAbbreviation ⇒ s"Abbreviation: ${a.castTo[HasAbbreviation].abbreviation}"
k ← _:HasUnicode ⇒ s"Unicode: ${a.castTo[HasUnicode].unicode}"
l ← _:HasDecimal ⇒ s"Decimal: ${a.castTo[HasDecimal].decimal}"
) {(i,j,k,l) mkString "\n"}
}
}
另一種選擇是讓每個特性需要一個toString實現(可能會雖然使用不同的名稱)。然後列出所有具有此toString函數的特徵。然後從特徵的所有toString方法中創建一個單一字符串。
我從來不知道super調用了所有的toString方法。除非另有說明,否則我認爲它只叫1。謝謝您的幫助。我已經結束了稍微修改,但它工作得很好! –