【发布时间】:2015-04-04 19:37:23
【问题描述】:
只是在开发概念证明库。尝试在可能的情况下抽象并混合特征而不是继承,同样对于这个库,Character 的所有实例之间实际上只有一个共同特征,根本没有类对象,只是混合了特征来构建一个案例对象。试图做一个智能的 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 方法中创建一个字符串。
【问题讨论】:
标签: scala