gpt4 book ai didi

具有通用 self 类型的 Scala 特征

转载 作者:行者123 更新时间:2023-12-01 02:03:32 24 4
gpt4 key购买 nike

我有一个特征,它定义了一个 Action ,它是 .copy() 的美化版本。看起来像这样:

trait Optimize[T] {
def optimize: T
}

和一堆扩展它的类,如:
case class Account(field: String) extends Optimize[Account] {
def optimize = this.copy(field = field.intern())
}

有没有办法定义一个特性,它需要方法优化返回与 self 相同的类型,但在扩展它时不需要指定类型?所以我可以写:
case class Account(field: String) extends Optimize {
def optimize = this.copy(field = field.intern())
}

最佳答案

简短的回答:你不能。

您需要以一种或另一种方式(抽象类型)告诉 Optimize该函数的返回类型是什么。

为什么?因为 Optimize可以在类型表达式中使用而无需指定具体类,并且编译器无法知道它将生成什么类型​​:

def someOtherMethod (a: Optimize) {
val result = a.optimize // what is the type?
}

(在抽象类型的情况下,返回类型将是 a.TOptimize#T ...不是很有用)

关于具有通用 self 类型的 Scala 特征,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34425257/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com