То, о чем вы просите, является аргументом pass by reference. JVM не те и ни делает Scala *
Вы должны либо вернуть обновленную карту:.
private def add[T](n: String, t: T, k: Map[String,T]): Map[String,T] = k + (n -> t)
или возвращение обоих, или если вы должны вернуться T
, написать класс-оболочку:
case class Vary[A](var value: A) { def apply() = value }
private def add[T](n: String, t: T, k: Vary[Map[String,T]]) = { k.value += (n -> t); t }
val map = Vary(Map.empty[String,Int])
add("fish", 5, map)
map() //Map[String,Int] = Map(fish -> 5)
* Ну, а не напрямую. Конечно, во внешнем контексте нужно как-то менять закрытие, а на самом деле то, что делает Scala, - это использовать класс-оболочку, подобный тому, который я показываю выше.
ОК, спасибо! .... – Alex
Это не должно быть пропуск по ссылке. Это может быть «var», не делая переориентации видимости на вызываемом. Я дам вам, что похоже, что он хочет пройти по ссылке, так как иначе код будет бессмысленным. Что я могу сказать? Я придирчив. :-) –
@ DanielC.Sobral - Этап оптимизации моей почтовой компиляции рутинировал эту ветвь как мертвый код, и поэтому я не упоминал об этом. :) –