将函数作为参数传递给类构造函数时如何避免关闭?
我的类构造函数接受 type 的函数() => Unit
。在程序工作过程中,我想从可变映射中访问一个键值对,该映射在使用构造函数创建对象时未定义
val cats = scala.collection.mutable.Map[String, Cat]
class Trigger(period: Long, f: () => Unit) {
//pseudocode:
when period passes, f()
}
someWonderfulObject += new Trigger (1000, () => cats("Hershy").meow)
cats += ("Hershy" -> Cat())
然后,当美妙的对象触发它的触发器时,我得到没有像“Hershy”这样的键的错误。我得出的结论是,显然,这是由于在没有“Hershy”的状态下关闭f
了缺点。Trigger
我现在的问题是 - 如何避免 Scala 在此处使用闭包,而是查看 的实际状态cats
?
更新:
“当周期过去”的代码是这样的:
def update(tpf: Float) {
timePassed += tpf
if(timePassed > period) f()
}
该tpf
值来自上面,所以这一切似乎都可以。
更新:
我发现问题出在另一个完全不相关的地方,我混淆了所有这些东西的容器。但是,谢谢大家,我从答案中学到了一些东西。