为什么下划线不起作用?

时间:2017-09-25 12:14:37

标签: scala

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

1 个答案:

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