2017-09-25 57 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類型,我希望你不能在另一片葉子上包裝葉子。