Scalaの型システムでできるかどうかわからないことをしようとしています。
基本的に、同じタイプの関数を内部的に実行しながら、一般的な定義からクロージャーを作成し、そのクロージャーを返したいと思います。
例えば:
val f = async[(str:String, i:Int, b:BigInt) => Unit]({ (String, Int, BigInt) =>
// Code here...
})
// 'f' would have a type of (String, Int, BigInt) => Unit and would wrap the passed anonymous function
定義の理論的な例:
def async[T](
shell: Shell,
success: T,
failure: (Throwable) => Unit): T = {
new T {
val display = shell.getDisplay()
display.asyncExec(new Runnable() {
def run(): Unit = {
try {
success(_)
} catch {
case e:Throwable =>
failure(e)
}
}
})
}
}
これにより、SWTをビジネスロジックから除外しながら、SWTの非同期コールバックを作成する簡単なシステムを使用できるようになります。