Scala 学習の進行状況で、コールバックを使用して単純な DSL を実装しようとしています。
object Button {...} // apply
class Button(val name: String) {
private val: => Unit; // doesn't work
def click(f: => Unit) = {
_click_cb = f
this
}
def onClick() = this._click_cb()
}
Button("Click me!") click {println("Clicked!")}
新しいオブジェクトを作成し、ストアへのコールバックを渡します。私のデモフレームワークはonClick
、保存されたものを呼び出す必要があるメソッドを起動します
それは動作し() => Unit
ますが、私のDSLは醜く見えます:
Button("Click me!") click (() => println("Clicked!"))
onClick
確かに、後で匿名クラスを抽象化して実装できます
new Button("Click me!") {def onClick = println("Clicked!")}
しかし、DSLなどで遊びたい
質問は次のとおりです。
f
に保存するにはどうすればよい_click_cb
ですか?- に初期の「空」関数を提供するにはどうすればよい
_click_cb
ですか? - そして、これを達成するためのより多くのスカラウェイがあるでしょうか? (匿名クラスなし)