首页 > 解决方案 > Scala 类型不匹配 - 发现:所需单位:数组 [字符串]

问题描述

我不明白为什么 Scala 在以下示例中抱怨类型错误:

def GetRanges(RangeString1: String): Array[String] = {
    val GetOneRange = "\\d+\\-\\d+".r;
    var AllRanges = new Array[String](0);
    if (!f_stringNullEmpty(RangeString1)) {
      GetOneRange.findAllIn(RangeString1).matchData.foreach(
        m => AllRanges = AllRanges ++ Array[String](m.group(0)) // Explicit casting to Array[String]
      )
    }
    return scala.util.Sorting.quickSort(AllRanges);
}

我收到的错误是:

 notebook:38: error: type mismatch;
 found   : Unit
 required: Array[String]
 return scala.util.Sorting.quickSort(AllRanges);
                                    ^

显然,遍历正则表达式结果并将它们添加到数组中会导致类型更改。但为什么?还是我错过了一些更基本的东西?

注意:我知道 if 语句返回一个类型 Unit,因为没有指定 else。但我看不出这会影响我的数组的类型。

标签: scalatype-mismatchdatabricks

解决方案


返回类型scala.util.Sorting.quickSort(AllRanges)Unit。但是,GetRanges需要Array[String]

def GetRanges(RangeString1: String): Array[String] = {
val GetOneRange = "\\d+\\-\\d+".r;

这是quickSort用于排序数组

 /** Sort array `a` with quicksort, using the Ordering on its elements.
    * This algorithm sorts in place, so no additional memory is used aside from
    * what might be required to box individual elements during comparison.
    */
  def quickSort[K: Ordering](a: Array[K]): Unit = {
    // Must have iN >= i0 or math will fail.  Also, i0 >= 0.

推荐阅读