我正在尝试从以下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
的做法是什么?有人可以对此有所了解吗?
由于
答案 0 :(得分:6)
@sp
是@specialized
中的@specialized
的别名。
我们在尖顶中使用专门化 很多 ,因此必须编写package spire
package math
class Foo[@sp T]
或在导入中重命名过于繁琐。
请注意,如果您有单独的包语句,则spire包对象中的定义只能从子包中看到。
所以这是有效的
package spire.math
class Foo[@sp T]
然而这不会
package scala
package collection
package immutable
scala标准库中使用了相同的方法。如果您查看类似spire package object的类,请注意package语句分三部分完成
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/db" />
<property name="username" value="root" />
<property name="password" value="password" />
</bean>