2017-09-25 60 views
0

scala新手,想知道为什么下划线在下面的最后一行不起作用,而第3行的'for'循环语法正常工作。 BTW Leaf是一个案例类,可以接受(Char,Int)来应用/构建。 谢谢!为什么下划线不在这里工作?

val chars: (List[Char]) = List('a', 'b') 
    var leaves: ListBuffer[Leaf] = ListBuffer() 

    for (c <- chars) leaves.append(Leaf(c, 1))//ok 
    leaves.foreach(leaves.append(Leaf(_, 1)))//COMPILE ERROR 
+2

欢迎来到SO!请[编辑]你的问题,并添加你得到的'Leaf'和* exact *错误消息的定义。 –

回答

4

_符号的规则是这样的,Leaf(_, 1)相当于x => Leaf(x, 1),所以leaves.foreach(leaves.append(Leaf(_, 1)))相当于leaves.foreach(leaves.append(x => Leaf(x, 1)))。这是一个错误,因为leaves.append不带功能,也因为foreach

你想要的是leaves.foreach(x => leaves.append(Leaf(x, 1))),它给出了一个函数foreach。不过,我认为这仍然不会工作,因为x将有Leaf类型,我希望你不能在另一片叶子上包装叶子。