Введите псевдоним для неизменяемых коллекций

Как лучше всего устранить ошибку компиляции в приведенном ниже примере? Предположим, что 'm' должен иметь тип GenMap, и я не могу управлять аргументами myFun.

import scala.collection.GenMap

object Test {
    def myFun(m: Map[Int, String]) = m

    val m: GenMap[Int, String] = Map(1 -> "One", 2 -> "two")


    //Build error here on m.seq
    // Found scala.collection.Map[Int, String]
    // Required scala.collection.immutable.Map[Int, String]
    val result = myFun(m.seq)
}

РЕДАКТИРОВАТЬ:

Я должен был быть яснее. В моем реальном случае использования у меня нет контроля над myFun, поэтому я должен передать ему карту. «m» также возникает из другого компонента scala, такого как GenMap. Мне нужно преобразовать одно в другое, но возникает конфликт между collection.Map и collection.immutable.Map


person Pengin    schedule 02.10.2012    source источник


Ответы (1)


m.seq.toMap решит вашу проблему.

Согласно подписи, представленной в API toMap возвращает scala.collection.immutable.Map, который, как говорят, требуется в вашем сообщении об ошибке. scala.collection.Map, возвращаемый методом seq, является более общей чертой, которая, помимо того, что является родителем неизменяемой карты, также является родителем изменяемой и параллельной карты.

person Nikita Volkov    schedule 02.10.2012
comment
Спасибо. Можете ли вы дать какое-либо представление о том, почему это не работало изначально? - person Pengin; 02.10.2012
comment
Конечно. Смотрите обновления. У вас в значительной степени было объяснение в вашем вопросе. - person Nikita Volkov; 02.10.2012
comment
Раньше я не ценил этого «родительского» дела. Раньше просто предполагал, что это эквивалентно. Явно нет. - person Pengin; 02.10.2012