【发布时间】:2015-12-22 22:09:52
【问题描述】:
我有一个特征,它定义了一个动作,它是 .copy() 的美化版本。看起来像这样:
trait Optimize[T] {
def optimize: T
}
还有一堆扩展它的类,比如:
case class Account(field: String) extends Optimize[Account] {
def optimize = this.copy(field = field.intern())
}
有没有一种方法可以定义一个特征,该特征需要方法 optimize 返回与 self 相同的类型,但在扩展它时不需要指定类型?所以我可以写:
case class Account(field: String) extends Optimize {
def optimize = this.copy(field = field.intern())
}
【问题讨论】:
-
另一种方法是将其拆分为隐式样式,因此
optimize : T => T不是成员,而是当您在范围内有Optimize[T]时可以在 T 上使用它。那么就没有什么有趣的事情返回不同的类型了