関数をパラメーターとしてクラスコンストラクターに渡すときにクロージャを回避するにはどうすればよいですか?
私のクラス コンストラクターは 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
、 cons に渡された状態で閉じられたためであると結論付けています。Trigger
私の質問は今です - Scala がここでクロージャーを利用するのを避け、代わりに ? の実際の状態を調べる方法はcats
?
アップデート:
「期間が経過したとき」のコードは次のとおりです。
def update(tpf: Float) {
timePassed += tpf
if(timePassed > period) f()
}
値は上から取得されるtpf
ため、ここではすべて問題ないようです。
アップデート:
私は問題が別のまったく無関係な場所にあることを発見しました。私はこれらすべてのもののコンテナを混乱させました. しかし、皆さんありがとうございます。回答から何かを学びました。