私はこのような機能を持っています:
private def add[T](n: String, t: T, k: Map[String,T]): T = { k += (n -> t); t }
コンパイラは、val への再割り当てがあると不平を言うので、これを変更可能なマップに変更するまでもなく、ケース クラスのように「var k: Map...」のようなことを言う方法はありますか?
ありがとう!
あなたが求めているのは、参照引数による受け渡しです。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)
*まあ、直接ではありません。もちろん、何らかの方法でクロージャを使用して外部コンテキストで var を変更する必要があります。実際、Scala が行うことは、上で示したものとよく似たラッパー クラスを使用することです。