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
答案 0 :(得分: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
类型,我希望你不能在另一片叶子周围换一片叶子。