【发布时间】:2011-10-04 03:30:54
【问题描述】:
这可能是一个不成熟的想法,但我可以复制表达式的环境吗?考虑以下示例:
class foo[T](block: => T) {
var data = { () => block }
def run() = { data() }
}
var a = 5
var b = new foo({ a += 1; println(a) })
var c = new foo({ a += 1; println(a) })
b.run()
c.run()
b.run()
c.run()
我得到以下输出:
6
7
8
9
但我真正想要的是:
6
6
7
7
简而言之,一旦初始值被解析,我希望foo 在块中拥有变量的副本,而不是引用它们。这可以做到吗? scala.util.DynamicVariable 看起来很有希望,但我很难理解如何在上面的示例中使用它。
【问题讨论】: