Я оставлю исходный ответ ниже, хотя он довольно-таки неправильный, так как я не понял вопрос правильно.
В настоящей библиотеке коллекции Scala в значительной степени применяются различные методы добавления для изменяемых/неизменяемых, возможно, в надежде сделать ясно в исходном коде, какой тип коллекции используется. Как сказано, это пересматривается в 2.8, и эта предпосылка уходит.
В этом случае абстрактные классы не предоставляют методы, о которых вы думаете, потому что они могут существовать для неизменяемых, но не для изменяемых, и наоборот. Или они могут иметь одинаковое имя , но разные реализации.
И, следовательно, было бы невозможно обеспечить их в базовом классе.
Но, более того, обратите внимание, что, таким образом, если вы получаете scala.collection.map, вы не можете не использовать, обрабатывая его как изменяемый, когда вы получили неизменяемый или наоборот.
И, теперь, за неправильный ответ. :)
Вы можете (нет, вы не можете - код ниже использует scala.collection.imutable.Map).
scala> val x = Map(1 -> 'a', 2 -> 'b')
x: scala.collection.immutable.Map[Int,Char] = Map(1 -> a, 2 -> b)
scala> x ++ Map(3 -> 'c')
res5: scala.collection.immutable.Map[Int,Char] = Map(1 -> a, 2 -> b, 3 -> c)
scala> var y = x
y: scala.collection.immutable.Map[Int,Char] = Map(1 -> a, 2 -> b)
scala> y += (3 -> 'c')
scala> y
res7: scala.collection.immutable.Map[Int,Char] = Map(1 -> a, 2 -> b, 3 -> c)
scala> x + (3 -> 'c')
res8: scala.collection.immutable.Map[Int,Char] = Map(1 -> a, 2 -> b, 3 -> c)
Хмммм. Мне кажется, что, создавая два типа, называемых Map, обе расширяющиеся коллекции.Map, но по-разному ведут себя, создатели библиотеки Scala уже создали ситуацию, в которой я могу «испортить, рассматривая [что-то] как изменчивое, когда [он] неизменен». Если бы они не хотели, чтобы это было так, они не должны иметь общий супертип! –
Это обе карты в том смысле, что они представляют собой обе коллекции, к которым могут обращаться ключи. Это карта. И, как вы сами узнали, классы были написаны так, что вы не подведете себя. –