gpt4 book ai didi

compiler-construction - 在这个 Scala 代码中 compare 与 compareTo 有何不同?

转载 作者:行者123 更新时间:2023-12-04 00:17:44 25 4
gpt4 key购买 nike

我有一段代码用于为优先级队列提供隐式排序:

type Time = Int
type Item = (Time, Whatever)

implicit def order(thisItem: Item): Ordered[Item] =
new Ordered[Item] {
override def compare(thatItem: Item) = {
val result = thisItem._1 compareTo thatItem._1
-result
}
}

现在此代码无法在 Scala 2.7 上编译 - 错误消息是:
error: type mismatch;
found : SimulationMode.this.Time
required: ?{val compareTo: ?}
Note that implicit conversions are not applicable because they are ambiguous:
both method int2Integer in object Predef of type (Int)java.lang.Integer
and method intWrapper in object Predef of type (Int)scala.runtime.RichInt
are possible conversion functions from SimulationMode.this.Time to ?{val compareTo: ?}
val result = thisItem._1 compareTo thatItem._1
^

我找到了两种编译方法——要么声明 的类型结果成为 诠释 或改用 比较 比较 .但我的问题是 - 这种错误是否有原因,消息是什么意思,这是 scala 编译器中的错误吗? compareTo 只是在 Ordered[A] 特征中调用 compare 并且具有相同的签名......加上它们都返回 Int,那么为什么我自己声明类型很重要?

最佳答案

发生这种情况是因为 Int 没有 compareTo方法就像错误所说的那样。此外,当搜索使这项工作的隐式时,编译器发现转换为 java.lang.Integer 之间存在歧义。和 scala.runtime.RichInt两者都提供 compareTo方法。当您使用 compare而不是 compareTo它有效,因为只有 RichInt转换提供了这种方法。仅供引用 compare来自 scala 的 Ordered特征。

我不确定你在声明结果类型时说它有效的意思,这不应该有所作为,你必须发布你正在使用的代码,这似乎使它工作。

关于compiler-construction - 在这个 Scala 代码中 compare 与 compareTo 有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2155019/

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