簡體   English   中英

Scala類型不匹配;找到:布爾值必需:List [Int]

[英]Scala type mismatch;found : Boolean required: List[Int]

我試圖用一個簡單的例子解決我的sbt測試

package example
object Lists {
    def sum(xs: List[Int]): Int = {

        xs match {
      case x :: tail => x + sum(tail)
      case Nil => 0
     }
    }
    def max(xs: List[Int]): Int = {
      xs match {
        case Nil => throw new java.util.NoSuchElementException()
        case List(x) => x
        case x :: y :: rest => max ((if (x > y) x else y) :: rest)  
    }
    }

  }

可以從http://www.filedropper.com/listssuite_1下載第二個文件

當我嘗試用sbt測試

[error] /home/milenko/dom1/example/src/test/scala/example/ListsSuite.scala:122: type mismatch;
[error]  found   : Boolean
[error]  required: List[Int]
[error]     assert(sum(List() === 0))
[error]                       ^
[error] /home/milenko/dom1/example/src/test/scala/example/ListsSuite.scala:134: type mismatch;
[error]  found   : Boolean
[error]  required: List[Int]
[error]       assert(max(List(1, -4, 2, 6) === 6))
[error]                                    ^
[error] two errors found
[error] (test:compileIncremental) Compilation failed
[error] Total time: 1 s, completed 17/03/2017 10:43:00

我不明白為什么會這樣,編譯器怎么發現我的類型是布爾值?

這是錯誤的:

assert(sum(List() === 0))

因為sum參數的類型是boolean( List() === 0

試試: assert(sum(List()) === 0)

max函數也是如此。

List() === 0是布爾類型的表達式,因為它可以為true(如果空列表等於數字零)或false。 或更准確地說,它只能是假的,因為空列表永遠不會等於0。然后,您嘗試計算該布爾值的總和,這是類型錯誤。

134行也是如此。

暫無
暫無

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

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