2017-02-20 30 views
2

我试图生成一个函数,它返回一个List,其中包含Scala中的布尔值列表。到目前为止,功能如下:Scala:类型单元的表达式不符合类型List [List [Boolean]]

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 (n == 1) {val bools: List[List[Boolean]] = List(List(true, false) 

但仍然产生相同的错误。我在这里错过了非常明显的东西吗?我觉得好几个小时一直在盯着这个,我仍然无法完全理解我的错误。

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

编辑:我回复了一些意见,说明'其他'是因为解决这个问题后被添加。看看你的意见,我尝试添加一个,这是固定的。我仍然不太明白,这是如何将返回类型从“任何”更改为正确的类型,但它的工作原理是什么。

回答

1

这段代码有几个问题。首先,你必须像

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得到一个错误。

+0

'else if'后面还有一个'else',但我想在继续前进之前修正错误。已经接受了您的建议,以返回空列表。更有意义!我不确定为什么我以前没有使用它。感谢您的建议! – LittleAngryProgrammer

+0

@haffla,他没有返回null。他正在返回值为null的有效类型。 –

+0

我看,这只是不是很好斯卡拉风格 – haffla

1

val bools: List[List[Boolean]] = List(List(true, false)是一项任务,其类型为Unit,您需要List(List(true, false)而无需分配。

+0

单靠这一点无法解决问题。 – pedrofurla

+0

已经尝试过这种方式,除了'Any'类型而不是'Unit'之外,它会返回相同的错误。 – LittleAngryProgrammer

0

您可以只写一个更简单的版本,而不是执行相同的功能。

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

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

相关问题