学习 Scala3 扩展和 CanEqual 概念,但发现扩展 Int 的某些特性有困难。
在以下示例中,我可以轻松地向 Int 添加 >= 功能以将其与 RationalNumber 案例类进行比较,但无法修改 == 的行为。(注 1~2 与 RationalNumber(1,2) 相同)。
这个问题似乎与基本的 AnyVal 类型以及 Scala 如何传递给 Java 来处理 equals 和 == 相关。
case class RationalNumber(val n: Int, val d: Int):
def >=(that:RationalNumber) = this.num * that.den >= that.num * this.den
//... other comparisons hidden (note not using Ordered for clarity)
private def gcd(a: Int, b: Int): Int = if (b == 0) a else gcd(b, a % b)
val sign = …
Run Code Online (Sandbox Code Playgroud)