SynchronizedSet и набор операций в Scala - PullRequest
3 голосов
/ 12 декабря 2011

В REPL:

import collection.mutable.{ HashSet, SynchronizedSet }

var myPool = new HashSet[String] with SynchronizedSet[String]
myPool += "oh"
myPool += "yes"
myPool = myPool.tail

и я получаю:

error: type mismatch;
 found   : scala.collection.mutable.HashSet[String]
 required: scala.collection.mutable.HashSet[String] with scala.collection.mutable.SynchronizedSet[String]
   myPool = myPool.tail
                   ^

Что я делаю не так?

1 Ответ

5 голосов
/ 12 декабря 2011

Как говорится в сообщении, myPool.tail имеет тип HashSet[String], а ваша переменная MyPool объявлена ​​HashSet[String] with SynchronizedSet[String]

Вам просто нужно объявить тип, который вы хотите, чтобы избежать слишком точного логического вывода.

var myPool : HashSet[String] = new HashSet[String] with SynchronizedSet[String]

Обратите внимание, что для изменяемого набора tail является дорогостоящей операцией и возвращает вам новый набор. Это может быть не то, что вы хотите. (Более того, в спецификации не указано, какой элемент будет удален)

...