3 ms·
Not sure if i completely understand, but the example you mentioned would work in Scala. If a mutable variable is referenced in default args, its value at define
by zaptheimpaler 10y ago
Not sure if i completely understand, but the example you mentioned would work in Scala. If a mutable variable is referenced in default args, its value at define-time is used.
Example:
scala> var x = 5
x: Int = 5
scala> def func(arg1: Int = (x+1)) = { println(arg1)}
func: (arg1: Int)Unit
scala> func()
6
scala> var x = 7
x: Int = 7
scala> func()
6 //unchanged
For reference vars the closure captures a local copy:
scala> var list = List(1,2,3)
list: List[Int] = List(1, 2, 3)
scala> def printList(arg1: List[Int] = lis) = { println(arg1) }
printList: (arg1: List[Int])Unit
scala> printList()
List(1, 2, 3)
scala> var list = List(4,5,6)
list: List[Int] = List(4, 5, 6)
scala> printList()
List(1, 2, 3)