2017-03-11 75 views
0

我正在開發Scala Coursera課程的函數式編程;我正在研究關於霍夫曼編碼樹的練習。如何使用Scala構造函數

這裏的代表哈夫曼樹

sealed abstract class CodeTree 
case class Fork(left: CodeTree, right: CodeTree, chars: List[Char], weight: Int) extends CodeTree 
case class Leaf(char: Char, weight: Int) extends CodeTree 

代碼,我們應該是實現一個功能,需要一個List[(Char,Int)],並返回一個List[Leaf]

這裏是我的代碼:

def makeOrderedLeafList(freqs: List[(Char, Int)]): List[Leaf] = freqs.map(
    (c, i) => Leaf(c, i) 
) 

但我得到這個錯誤

enter image description here

任何人都可以向我解釋這個代碼有什麼問題嗎?

回答

2

這是你正在尋找的語法:

def makeOrderedLeafList(freqs: List[(Char, Int)]): List[Leaf] = freqs.map { 
    case (c, i) => Leaf(c, i) 
} 

既然你映射元組的列表,如果你想爲你迭代,你需要提供匹配的元組的情況下解壓它們。

你也可以解開你的元組是這樣的:

def makeOrderedLeafList(freqs: List[(Char, Int)]): List[Leaf] = freqs.map(tuple => { 
    val (c, i) = tuple 
    Leaf(c, i) 
})