Позвольте мне обобщить вашу проблему:
- Вы хотите вызвать метод для неизменной структуры данных
- Вы хотите, чтобы он возвратил некоторое значение и переназначил
var
- Поскольку структура данных неизменна, вам необходимо
- возвращает новую неизменяемую структуру данных или
- выполнить присваивание внутри метода, используя прилагаемое замыкание
Итак, ваша подпись должна выглядеть как
def getOrElseUpdate(key: K): Tuple2[V, Map[K,V]]
//... use it like
val (v, m2) = getOrElseUpdate(k)
map = m2
или
def getOrElseUpdate(key: K, setter: (Map[K,V]) => Unit): V
//... use it like
val v = getOrElseUpdate(k, map = _)
Если вы можете жить с одним из этих решений, вы можете добавить свою собственную версию с неявным преобразованием, но, судя по одним только сигнатурам, я не думаю, что что-то из этого находится в стандартной библиотеке.