Scala 在类型别名中使用上下文绑定

Scala 在类型别名中使用上下文绑定,scala,Scala,可以在Scala中的类型别名中使用上下文边界吗 e、 g 不,因为上下文绑定实际上是额外隐式参数的简写 例如: def sort[A : Ordering](xs: Seq[A]) 是的缩写形式 def sort[A](xs: Seq[A])(implicit ordering: Ordering[A]) 这不能在类型定义中表示。您必须有一个单独的值声明来表示JPP提到的隐式参数,而不是在类型声明中直接绑定上下文 定义类型的人还必须为上下文绑定提供证据: trait Generic {

可以在Scala中的类型别名中使用上下文边界吗

e、 g


不,因为上下文绑定实际上是额外隐式参数的简写

例如:

def sort[A : Ordering](xs: Seq[A])
是的缩写形式

def sort[A](xs: Seq[A])(implicit ordering: Ordering[A])

这不能在类型定义中表示。

您必须有一个单独的值声明来表示JPP提到的隐式参数,而不是在类型声明中直接绑定上下文

定义类型的人还必须为上下文绑定提供证据:

trait Generic {
  type U
  implicit val ordering: Ordering[U]  // evidence for U: Ordering

  def max(u1: U, u2: U) = List(u1, u2).max
}

def concrete[T: Ordering] = new Generic {
  type U = T
  val ordering = implicitly[Ordering[T]]
}

assert(concrete[Int].max(1,3) == 3)
trait Generic {
  type U
  implicit val ordering: Ordering[U]  // evidence for U: Ordering

  def max(u1: U, u2: U) = List(u1, u2).max
}

def concrete[T: Ordering] = new Generic {
  type U = T
  val ordering = implicitly[Ordering[T]]
}

assert(concrete[Int].max(1,3) == 3)