2014-10-28 34 views
11

我想添加一個三元組元組到一個ListBuffer。直觀地說,根據編譯器的說法,我的第一次嘗試是代碼片段1,它有一個語法錯誤。然後,我已經嘗試了片段2和3,兩者都可以工作。所以有人可以向我解釋爲什麼代碼片段1中的代碼在語法上是錯誤的。scala - 添加一個元組到列表緩衝區

片斷1

import scala.collection.mutable.ListBuffer 
    val b : ListBuffer[(Int, Int,Int)] = ListBuffer() 
    b += (1,1,1) 

片斷2

import scala.collection.mutable.ListBuffer 
    val b : ListBuffer[(Int, Int,Int)] = ListBuffer() 
    b += ((1,1,1)) 

片斷3

import scala.collection.mutable.ListBuffer 
    val b : ListBuffer[(Int, Int,Int)] = ListBuffer() 
    val i = (1,1,1) 
    b += i 

回答

21
b += (1,1,1) 

被解釋爲

b.+=(1,1,1) 

它看起來像一個函數調用傳遞三個參數來+

添加另一對括號的意味着它解釋爲

b.+=((1,1,1)) 

其傳遞預期元組。

val i = (1,1,1) 

單獨聲明的說法也沒有這種解釋的問題,所以就OK了。

+2

這被認爲是scala中的一個bug嗎? – Zee 2015-11-18 19:33:59