Scala:Unit类型的表达式不';不符合类型列表[列表[布尔]]

Scala:Unit类型的表达式不';不符合类型列表[列表[布尔]],scala,list,boolean,Scala,List,Boolean,我试图生成一个函数,返回一个包含Scala中布尔值列表的列表。到目前为止,函数如下所示: 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的表达式不

我试图生成一个函数,返回一个包含Scala中布尔值列表的列表。到目前为止,函数如下所示:

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]]”,尽管我已经指定程序需要返回布尔值列表。我还尝试了以下语法:

else if (n == 1) {val bools: List[List[Boolean]] = List(List(true, false)
但同样的错误仍然存在。我是不是错过了一些很明显的东西?我觉得我已经盯着这个看了好几个小时了,但我仍然不能完全理解我做错了什么

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


编辑:我对此回复了一些评论,指出在修复此问题后将添加“else”。通过查看您的评论,我尝试添加一个,这就是修复它的方法。我仍然不太明白如何将返回类型从“Any”更改为正确的类型,但它仍然有效。

val bools:List[List[Boolean]]=List(List(true,false)
是一个赋值,属于您想要的
List(true,false)类型
没有赋值。

此代码有几个问题。首先,您的结构如下

if ...
else if ...
这是错误的,因为如果既不满足第一个条件,也不满足第二个条件,它将产生
单位
。您想要的是:

if ...
else if ... //optional
else ....
其次,赋值总是产生
Unit
val bools:List[List[Boolean]]=List(List(true,false)
是赋值。只要写
List(List(true,false)

第三,如果要返回空列表,必须编写:

List.empty
或者更好

Nil

我感到惊讶的是,返回
null

时没有出现错误。您只需编写一个更简单的版本,而不用编写同样的函数

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

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

仅此一点无法解决问题。尝试过此操作后,返回的错误与类型相同,只是类型为“Any”而不是“Unit”。在“else If”之后有一个“else”,但我希望在继续之前修复错误。采纳了您的建议吗用于返回空列表。更有意义!我不知道为什么以前没有使用它。谢谢你的建议!@haffla,他没有返回null。他返回的是一个值为null的有效类型。@Manish Mishra,他的建议产生了一种更简洁的风格,并最终解决了问题。这确实是我应该做的,而不是c创建一个全新的变量只是为了给它赋值。haffla,再次感谢,问题解决了!