2017-03-11 76 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) 
})