Scala类型不匹配;找到:需要布尔值:List [Int]

时间:2017-03-17 13:53:40

标签: scala sbt

我试图用简单的例子来解决我的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

我不明白为什么会发生这种情况。编译器发现我的类型为布尔值?

2 个答案:

答案 0 :(得分:5)

这是错误的:

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

因为sum参数的类型是boolean(List() === 0

尝试: 而是assert(sum(List()) === 0)

最大功能也一样。

答案 1 :(得分:3)

List() === 0是布尔类型的表达式,因为它可以为true(如果空列表等于零)或者为false。或者更确切地说,它只能是假的,因为空列表永远不会等于0.然后尝试计算该布尔值的总和,这是一个类型错误。

第134行也是如此。