簡體   English   中英

在Scala中將函數參數定義為“var”?

[英]Define a function parameter as a “var” in Scala?

我有這樣的功能:

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)

*好吧,不是直接的。 當然,必須以某種方式使用閉包來改變外部上下文中的變量,事實上Scala所做的就是使用與上面顯示的類似的包裝類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM