【发布时间】:2019-09-11 06:44:34
【问题描述】:
以下是用 Scala 编写的快速排序函数,用于对混合类型(int、double、float 等)列表进行排序。错误弹出并在第 3 行中说“类型不匹配,预期:T => 布尔值,实际:T => 任何无法解析符号
在 Windows 10 上运行的 Intellij IDE 给出了此错误消息。
def qsort[T](list: List[T]): List[T] = list match {
case Nil => Nil
case pivot :: tail =>
val(smaller, rest) = tail.partition(_ < pivot)
qsort(smaller) ::: pivot :: qsort(rest)
}
【问题讨论】:
-
你会如何比较任意类型?
T需要是Comparable类型才能进行比较。 -
在 C++ 中,可比较的类型不需要指定,只要它们有运算符
-
C++ 在您调用泛型函数时检查
<等,但Scala 在编译该函数时会进行此项检查。 Scala 需要确保它适用于所有可能的T,因此您需要以某种方式限制允许的类型。您可以限制类型本身,或添加implicit参数。
标签: scala generics operator-overloading