我在scala中的这部分代码存在问题
object Test12 {
def times(chars: List[Char]): List[(Char, Int)] = {
val sortedChars = chars.sorted
sortedChars.foldLeft (List[(Char, Int)]()) ((l, e) =>
if(l.head._1 == e){
(e, l.head._2 + 1) :: l.tail
} else {
(e, 1) :: l
} )
}
val s = List('a', 'b')
val c = times s
}
最后一行给出错误:
缺少方法时间的参数;如果你这样,请用'_'跟这个方法 希望将其视为部分应用的功能
但是我不明白为什么,因为我给了最后一个函数2个参数 - foldLeft。
提前感谢您的帮助!
代码的概念是计算给定列表中每个字符的存在时间
答案 0 :(得分:3)
时间的句法很好,但在调用时需要使用括号,即:
val c = times(s)
但它不起作用,因为你使用l.head而不检查l是否为Nil,而空列表没有头。你可以,例如检查匹配:
def times(chars: List[Char]): List[(Char, Int)] = {
val sortedChars = chars.sorted
sortedChars.foldLeft (List[(Char, Int)]()) ((a,b) => (a,b) match {
case (Nil, e) => (e, 1) :: Nil
case ((e, count) :: l, f) =>
if (e == f) (e, count + 1) :: l
else (f, 1) :: (e, count) :: l
})
}
虽然更简单的方法是使用更高级别的集合函数:
def times(chars: List[Char]) = chars.groupBy(c=>c).map(x=>(x._1,x._2.length)).toList
答案 1 :(得分:1)
val c = times s
如果没有这样的括号,您无法调用方法。试试times(s)
或this times s
。