冒号后出现约束的scala参数化类型?
scala parameterized type with constraint appearing after the colon?
我正在查看 Sorting.scala 的来源,并对
下面源代码片段中最后一个方法的定义。
object Sorting {
/** Quickly sort an array of Doubles. */
def quickSort(a: Array[Double]) { sort1(a, 0, a.length) }
/** Quickly sort an array of items with an implicit Ordering. */
def quickSort[K: Ordering](a: Array[K]) { sort1(a, 0, a.length) } //<<??
类型参数 'K' 似乎被限制为一个子类型(也许?)
'Ordering'...不过没见过这种语法
我会有点(没有双关语意)理解如果
该方法定义如下:
def quickSort[K <% Ordering[K]](a: Array[K]) { sort1(a, 0, a.length) }
但我对只有冒号的约束的含义感到困惑。任何指向相关文档或进一步(解释)示例的链接都很棒。
提前致谢...
原来这是一个'Context Bound'。
在我正在阅读的一本非常好的书中找到了答案 'Programming Scala'。来自第 5 章关于隐式参数...这是一个示例
解释发生了什么:
case class MyList[A](list: List[A]) {
def sortBy1[B](f: A => B)(implicit ord: Ordering[B]): List[A] =
list.sortBy(f)(ord)
def sortBy2[B : Ordering](f: A => B): List[A] =
list.sortBy(f)(implicitly[Ordering[B]])
}
val list = MyList(List(1,3,5,2,4))
list sortBy1 (i => -i)
list sortBy2 (i => -i)
类型参数 B : Ordering 称为上下文绑定。它意味着第二个隐式参数列表采用 Ordering[B] 实例。
更多here
我正在查看 Sorting.scala 的来源,并对 下面源代码片段中最后一个方法的定义。
object Sorting {
/** Quickly sort an array of Doubles. */
def quickSort(a: Array[Double]) { sort1(a, 0, a.length) }
/** Quickly sort an array of items with an implicit Ordering. */
def quickSort[K: Ordering](a: Array[K]) { sort1(a, 0, a.length) } //<<??
类型参数 'K' 似乎被限制为一个子类型(也许?) 'Ordering'...不过没见过这种语法
我会有点(没有双关语意)理解如果 该方法定义如下:
def quickSort[K <% Ordering[K]](a: Array[K]) { sort1(a, 0, a.length) }
但我对只有冒号的约束的含义感到困惑。任何指向相关文档或进一步(解释)示例的链接都很棒。
提前致谢...
原来这是一个'Context Bound'。 在我正在阅读的一本非常好的书中找到了答案 'Programming Scala'。来自第 5 章关于隐式参数...这是一个示例 解释发生了什么:
case class MyList[A](list: List[A]) {
def sortBy1[B](f: A => B)(implicit ord: Ordering[B]): List[A] =
list.sortBy(f)(ord)
def sortBy2[B : Ordering](f: A => B): List[A] =
list.sortBy(f)(implicitly[Ordering[B]])
}
val list = MyList(List(1,3,5,2,4))
list sortBy1 (i => -i)
list sortBy2 (i => -i)
类型参数 B : Ordering 称为上下文绑定。它意味着第二个隐式参数列表采用 Ordering[B] 实例。
更多here