Scala:类型Unit的表达式不符合List [List [Boolean]]

时间:2017-02-20 15:49:36

标签: scala list boolean

我正在尝试生成一个函数,该函数返回一个包含Scala中的布尔列表的List。到目前为止,函数看起来像这样:

def listListBool(n: Int): List[List[Boolean]] = {
   val empty: List[List[Boolean]] = null
   if (n == 0) {empty}
   else if (n ==1) {val bools = List(List(true, false))
}

语句的'else if'部分用错误标记:“类型Unit的表达式不符合List [List [Boolean]]类型”,即使我已指定程序需要返回List布尔列表。我也尝试了以下语法:

else if (n == 1) {val bools: List[List[Boolean]] = List(List(true, false)

但仍然会产生同样的错误。我错过了一些非常明显的东西吗?我觉得自己已经盯着这几个小时,我仍然无法理解我的错误。

请记住,我是Scala的新手,我并不完全熟悉该语言及其语法的所有细节。

编辑:我回复了一些评论,说明在修复此问题后应添加“其他”。通过你的评论,我试着添加一个,这就是解决它的问题。我仍然不太明白如何将返回类型从“任何”更改为正确的类型,但它仍然可以正常工作。

3 个答案:

答案 0 :(得分:2)

此代码存在一些问题。首先你有一个像

这样的结构
if ...
else if ...

这是错误的,因为如果第一个和第二个条件都不满足,它将产生Unit。你想要的是:

if ...
else if ... //optional
else ....

其次,作业总是产生Unitval bools: List[List[Boolean]] = List(List(true, false)是作业。只需写下List(List(true, false)即可。

第三,如果你想要返回你必须写的空列表:

List.empty

或更好

Nil

我很惊讶您没有收到返回null的错误。

答案 1 :(得分:1)

val bools: List[List[Boolean]] = List(List(true, false)是一项分配,类型为Unit,您希望List(List(true, false)没有分配。

答案 2 :(得分:0)

你可以写一个更简单的版本,而不是做同样的功能。

def listListBool(n:Int) = if(n==0) Nil else List(List(true,false))

如果您使用的是Typesafe语言,则应完全避免使用null。