Я думаю, что ваша проблема в том, что вы закрываете (и, следовательно, изменяете свое значение во время работы вашей программы), а не закрываете другую переменную, инициализированную из.Возможно, вы захотите попробовать что-то более похожее на это:
class bar[T](block: (T) => T, a: T) {
var cur = a
def run() = { cur = block(cur); cur }
}
var a = 5
var b = new bar((r: Int) => { val q = r + 1; println(q); q }, a)
var c = new bar((r: Int) => { val q = r + 1; println(q); q }, a)
b.run()
c.run()
b.run()
c.run()
Вывод:
6
6
7
7
Однако учтите, что в отличие от вашего кода это не повлияет на значение переменной a
как он работает.