2017-02-20 36 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。

相關問題