2014-10-28 6 views
11

Я хотел бы добавить три целых кортежа в ListBuffer. интуитивно, моя первая попытка - это фрагмент кода 1, который имеет синтаксическую ошибку, согласно компилятору. Затем я попробовал фрагмент 2 и 3, оба будут работать. Так может кто-нибудь объяснить мне, почему код в фрагменте 1 синтаксически неправильный.scala - добавить кортеж в списокBuffer

фрагмент 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) 

также не имеют этой проблемы интерпретации так тоже нормально.

+2

Это считается ошибкой в ​​scala? – Zee

Смежные вопросы