簡體   English   中英

Scala類型不匹配-找到:所需單位:Array [String]

[英]Scala type mismatch - found: Unit required: Array[String]

我不明白為什么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,因為沒有指定其他類型。 但是我看不到那會影響我的數組類型。

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.

quickSort()改變AllRanges的位置,只返回Unit ,但是您已指定GetRanges()返回Array[String] ,就像quickSort()返回一個Array (不是)。

您可以通過將代碼更改為以下代碼來修復代碼(nb。您無需指定return ):

scala.util.Sorting.quickSort(AllRanges)
AllRanges

FWIW,您也可以通過執行以下操作來避免使用f_stringNullEmpty和數組並置:

def getRanges(s: String): Array[String] = {
  val p = """\d+\-\d+""".r
  Option(s).filter(_.nonEmpty).map(p.findAllIn) match {
    case Some(matches) if matches.nonEmpty =>
      val m = matches.toArray[String]
      scala.util.Sorting.quickSort(m)
      m
    case _ =>
      Array.empty[String]
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM