gpt4 book ai didi

Scala 泛型 this.type

转载 作者:行者123 更新时间:2023-12-03 04:47:18 26 4
gpt4 key购买 nike

我正在尝试创建一个通用特征,它有一个返回类本身实例的方法。例如:

trait SomeGenericTrait[T]{
def withData(newData : Seq[T]) : this.type
}

case class SomeImpl(data : Seq[Int]) extends SomeGenericTrait[Int] {
override def withData(newData : Seq[Int]) : SomeImpl = copy(data = newData)
}

error: overriding method withData in trait SomeGenericTrait of type(newData: Seq[Int])SomeImpl.this.type; method withData has incompatible type

没有显式返回类型:

case class SomeImpl(data : Seq[Int]) extends SomeGenericTrait[Int] {
override def withData(newData : Seq[Int]) = copy(data = newData)
}

error: type mismatch;
found : SomeImpl
required: SomeImpl.this.type

编译失败,因为已实现的 withData 的返回值为 SomeImpl,但基于特征方法声明的预期返回类型为 SomeImpl.this.type

有谁知道我需要如何更改特征方法声明的返回类型才能使其起作用?我拥有的更一般的用例是一种通过其扩展的通用特征来公开案例类的 copy 方法的方法。我知道我可能没有清楚地表达这一点,如果我需要澄清任何事情,请告诉我。

使用 Scala 2.10.0

最佳答案

您可以通过使用要混合的类的类型参数化特征来解决它:

trait SomeGenericTrait[T, X] {
def withData(newData: Seq[T]): X
}

case class SomeImpl(data: Seq[Int]) extends SomeGenericTrait[Int, SomeImpl] {
override def withData(newData: Seq[Int]): SomeImpl = copy(data = newData)
}

this.type 是一种单例类型 - 一个特定实例化 SomeGenericTrait 的类型。

关于Scala 泛型 this.type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20165598/

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