scala - 上下文边界和类

标签 scala implicit

下面的函数定义有什么问题。

def f[A: Ordered] (a: A, b: A): Boolean = a < b 

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

最佳答案

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

所以要么你更新到...

def f[A <: Ordered[_]](a: A, b: A): Boolean = a < b

...或者您使用 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)

Personally I don't recommend the implicit conversion from import scala.math.Ordering.Implicits._ (auto-magic stuff).

关于scala - 上下文边界和类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36599088/

相关文章:

Scala 尾递归

scala - 在 Scala 中的 firstCompletedOf 中需要什么是隐式的

scala - 为什么在某些情况下会忽略高阶隐式?

Fortran 隐式更改类型

scala - Scala 中有多少个隐式?

Scala 任何数字类型的隐式转换

Scala - 方法调用语法

scala - 如何使这个 Scala 隐式转换工作?

java - 根据特殊的非空格空白字符进行拆分

scala - 如何存储对 Scala 中一组静态 Java 方法的引用?