gpt4 book ai didi

scala - 这个 scala 的快速排序代码中的 `@sp` 语法是什么?

转载 作者:行者123 更新时间:2023-12-02 08:22:01 26 4
gpt4 key购买 nike

我正在尝试从以下 repo 中了解此快速排序代码

  object QuickSort {
@inline final def limit: Int = 16

final def sort[@sp A:Order:ClassTag](data:Array[A]): Unit = qsort(data, 0, data.length - 1)

final def qsort[@sp A](data:Array[A], left: Int, right: Int)(implicit o:Order[A], ct:ClassTag[A]): Unit = {

if (right - left < limit) return InsertionSort.sort(data, left, right + 1)

val pivot = left + (right - left) / 2
val next = partition(data, left, right, pivot)
qsort(data, left, next - 1)
qsort(data, next + 1, right)
}

final def partition[@sp A](data:Array[A], left:Int, right:Int, pivot:Int)(implicit o:Order[A], ct:ClassTag[A]): Int = {

val value = data(pivot)

//swap(pivot, right)
var tmp = data(pivot); data(pivot) = data(right); data(right) = tmp

var store = left
var i = left
while (i < right) {
if (o.lt(data(i), value)) {
//swap(i, store)
tmp = data(i); data(i) = data(store); data(store) = tmp
store += 1
}
i += 1
}
//swap(store, right)
tmp = data(store); data(store) = data(right); data(right) = tmp
store
}
}

[@sp A] 的目的是什么?我知道 [A] 语法适用于泛型,但添加 @sp 有什么作用?有人可以对此有所了解吗?

谢谢

最佳答案

@sp 是在 spire package object 中定义的 @specialized 的别名。 .

我们在 spire 中大量使用,因此必须编写 @specialized 或在导入中重命名太乏味了。

请注意,如果您有单独的包语句,来自 spire 包对象的定义将仅在子包中可见。

所以这行得通

package spire
package math

class Foo[@sp T]

而这不会

package spire.math

class Foo[@sp T]

在 scala 标准库中使用了相同的方法。如果你看一个像 scala.collection.immutable.Set 这样的类,注意package语句分三部分完成

package scala
package collection
package immutable

关于scala - 这个 scala 的快速排序代码中的 `@sp` 语法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36232250/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com