2014-10-28 12 views
11

Chciałbym dodać trzy-całkowitą krotkę do ListBuffer. intuicyjnie, moją pierwszą próbą jest fragment kodu 1, który ma błąd składniowy, zgodnie z kompilatorem. Następnie wypróbowałem fragment 2 i 3, oba będą działać. Czy ktoś mógłby mi wyjaśnić, dlaczego kod we fragmencie 1 jest błędny pod względem syntaktycznym.scala - dodaj krotkę do listyBuffer

fragment 1

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

fragment 2

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

fragment 3

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

Odpowiedz

21
b += (1,1,1) 

jest interpretowane jako

b.+=(1,1,1) 

który wygląda jak wywołanie funkcji przechodzącej trzy parametry do +

dodając kolejną parę parens Oznacza to interpretować jako

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

który przechodzi oczekiwany krotki.

Deklarowanie argument oddzielnie

val i = (1,1,1) 

też nie ma tego problemu interpretacji więc jest OK zbyt.

+2

Czy jest to uważane za błąd w scala? – Zee