2016-04-04 10 views
2

Einfache Frage noch einmal.scala: erzwinge unveränderlichen Typ in Schließung

Wie kann ich in Funktion/Schließung unten angeben, dass [mehr] sollte von unveränderlichen Typ kommen?

Sonst habe ich diese Nebenwirkung wie unten!

Dank

var more = 3 

def increase[T: Numeric](x: T): T = implicitly[Numeric[T]].plus(x, more.asInstanceOf[T]) 

val inc = increase[Int] _ 

more = 10 

println(inc(5)) 

Antwort

5

nicht sicher, ob das, was Sie suchen, aber wenn Sie den Wert durch die Funktion verwendet, um sicherzustellen, wollen nach einem bestimmten Punkt nicht ändert, können Sie es als separates hinzufügen Argumentliste, und wenden Sie die Funktion teilweise mit ihrem Wert an:

var more = 3 

def increase[T: Numeric](base: T)(x: T): T = implicitly[Numeric[T]].plus(x, base) 

val inc = increase[Int](more) _ 

more = 10 

println(inc(5)) // prints 8, as expected 
+0

Das ist was ich genau suche. Etwas anders in der Umsetzung. Aber das ist es! Vielen Dank – Pavel