繁体   English   中英

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

[英]Use context bound in type alias

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

例如

type U = A : B

您不必在类型声明中直接绑定上下文,而是必须有一个单独的值声明,表示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)

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

例如:

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

是一种简写形式

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM