我正在尝试生成一个函数,该函数返回一个包含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的新手,我并不完全熟悉该语言及其语法的所有细节。
编辑:我回复了一些评论,说明在修复此问题后应添加“其他”。通过你的评论,我试着添加一个,这就是解决它的问题。我仍然不太明白如何将返回类型从“任何”更改为正确的类型,但它仍然可以正常工作。答案 0 :(得分:2)
此代码存在一些问题。首先你有一个像
这样的结构if ...
else if ...
这是错误的,因为如果第一个和第二个条件都不满足,它将产生Unit
。你想要的是:
if ...
else if ... //optional
else ....
其次,作业总是产生Unit
,val 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。