gpt4 book ai didi

scala - 类型不匹配,预期 : T, 实际:T

转载 作者:行者123 更新时间:2023-12-02 03:35:20 25 4
gpt4 key购买 nike

我不明白这个错误要我做什么:

Type mismatch, expected: T, actual: T

我只有3行代码:

case class BaseElem[T](e: T)
case class OrderedElem[T <: Ordered](override val e: T) extends BaseElem[T](e) with Ordered[OrderedElem[T]] {
override def compare(that: OrderedElem[T]): Int = this.e.compare(that.e)
}

BaseElemT 的简单容器的。 OrderedElem是一个 Ordered T <: Ordered 的容器.所以我想要 OrderedElem 之间的比较s为各自元素的比较。

错误在 compare 的重写中,错误突出显示的代码是 that.e .

  1. 这是什么错误,我该如何解决?

  2. 边题,能不能申报OrderedElem简化并保留所需的语义?

最佳答案

问题出在 OrderedElem[T <: Ordered] 部分.在遵循 om-nom-nom 的气味清理并修复他指出的错误之后,我发现类似 Int 的类型(使用原始表示)不扩展 Ordered在 Scala 中(参见 this question ),因此必须使用“ View 绑定(bind)” <%告诉 Scala 也寻找可用的隐式转换。

现在我有:

class BaseElem[T](val e: T)

class OrderedElem[U <% Ordered[U]](override val e: U) extends BaseElem(e) with Ordered[OrderedElem[U]] {
override def compare(that: OrderedElem[U]): Int = this.e.compare(that.e)
}

object Run extends App {
val a = new OrderedElem(0)
val b = new OrderedElem(1)
println(a < b) // => true
}

关于scala - 类型不匹配,预期 : T, 实际:T,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23837489/

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