2017-03-17 48 views
1

我试图解决我的SBT测试用简单的例子Scala的类型不匹配;发现:需要布尔:列表[INT]

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 

我不明白为什么这个happens.How它配备的是编译器发现我喜欢的类型为布尔?

回答

5

这是错误的:

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

因为总和的参数的类型是布尔型(List() === 0

尝试: assert(sum(List()) === 0)代替。

同样适用于最大功能。

3

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

这同样适用于线134

相关问题