上下文边界和类

Abd*_*man 3 scala implicit

以下函数定义有什么问题。

def f[A: Ordered] (a: A, b: A): Boolean = a < b 
Run Code Online (Sandbox Code Playgroud)

我得到无法解析符号 <。由于 Ordered 是 A 的上下文类,因此它不应该能够解析 < 吗?我错过了什么?

cch*_*tep 5

Ordered 不是类型类,而是普通继承的基本特征。

所以要么你更新到...

def f[A <: Ordered[_]](a: A, b: A): Boolean = a < b
Run Code Online (Sandbox Code Playgroud)

...或者您使用Ordering保持上下文边界的类型类:

def f[T : Ordering](a: T, b: T): Boolean = {
  val order = implicitly[Ordering[T]]
  order.lt(a, b)
}

// Or:
def f[T](a: T, b: T)(implicit order: Ordering[T]): Boolean = order.lt(a, b)
Run Code Online (Sandbox Code Playgroud)

我个人不建议从import scala.math.Ordering.Implicits._(自动魔术的东西)进行隐式转换。