別の関数の結果を Promise にラップする関数があります。これをリフト関数に昇格させて、他の場所で再利用できるようにしたかったのです。元の定義は次のとおりです。
val abc = Promise[MyType]()
try {
val suck = abc.success(someOtherFunction(intParam1, intParam2))
} catch {
case ex: Exception => p.failure(ex)
}
だから私が最終的にやったことは次のとおりでした:
def myLiftFunc[X](x: X) (op: => X): Promise[X] = {
val p = Promise[X]()
try {
p.success(op)
} catch {
case NonFatal(ex) =>
p.failure(ex)
}
p
}
これを再利用するにはどうすればよいですか?つまり、渡す 2 番目の引数はサンクにする必要があるため、関数本体が必要とするパラメーターに関係なく、任意の関数本体を渡すことができます。
持ち上げられた関数を次のように呼び出すと:
myLiftFunc(someOtherFunction(intParam1, intParam2))
これは 型Int => Promise[Int]
で、 はをsomeOtherFunction
返しますInt
。私はちょうどPromise[Int]
私が電話したときに欲しいmyLiftFunc
!