2015-06-26 4 views

ответ

3

Я нахожу существующий ответ отвлекающим. Он не объясняет, в чем проблема, просто потому, что скобки интерпретируются как скобки параметров, а не скобки. Посмотрите здесь:

scala> list+=(5,"hello") 
<console>:10: error: type mismatch; 
found : Int(5) 
required: abc 
    (which expands to) (Int, String) 
       list+=(5,"hello") 
        ^
<console>:10: error: type mismatch; 
found : String("hello") 
required: abc 
    (which expands to) (Int, String) 
       list+=(5,"hello") 
        ^

scala> list+=(5 -> "hello") 
res1: list.type = Set((5,hello)) 

scala> list+=((5,"hello")) 
res2: list.type = Set((5,hello)) 

Первый раз терпит неудачу, потому что вы вызываете метод += с двумя параметрами, вместо того, чтобы называть его с одним параметром, который является кортеж.

Второй раз работает, потому что я использовал -> для обозначения кортежа.

В третий раз работает, потому что я помещаю дополнительные кортежи для обозначения кортежа.

Это говорит о том, что вызов Set a list является плохим, потому что люди склонны думать, что это List.

+0

Спасибо, что я искал, я продолжал получать ошибки, как в вашем примере, и не знал, как избавиться от них. –

0

Не совсем уверен, что вы ищете, но вот несколько примеров добавления типа abc в список, который также включает выход REPL.

type abc = (Int, String) 
defined type alias abc 

scala> val item : abc = (1, "s") 
item: (Int, String) = (1,s) 

// i.e. Creating a new abc 
scala> val item2 = new abc(1, "s") 
item2: (Int, String) = (1,s) 

scala> val list = List(item, item2) 
list: List[(Int, String)] = List((1,s), (1,s)) 

// Shows an explicit use of type alias in declaration 
val list2 = List[abc](item, item2) 
list2: List[(Int, String)] = List((1,s), (1,s)) 

// Adding to a mutable list although immutable would be a better approach 
scala> var list3 = List[abc]() 
list3: List[(Int, String)] = List() 

scala> list3 = (5, "hello") :: list3 
list3: List[(Int, String)] = List((5,hello)) 

// Appending abc (tuple) type to mutable list 
scala> list3 = list3 :+ (5, "hello") 
list3: List[(Int, String)] = List((5,hello), (5,hello))