我在想這可能是無形的庫。用函數替換異步匿名類
我正在使用無形來將匿名類轉換爲閉包。這需要使用來自FnHListerAux
特徵的hlisted
。
我想要做的就是擺脫傳入的虛擬函數,並返回與此函數具有相同類型簽名的閉包,如F
。如果沒有異步執行的匿名類,這很容易。有沒有辦法解決這個問題?
def async[F, A <: HList, R](
shell: Shell,
success: F,
failure: FunctionTypes.Failure,
dummy: F)(implicit h: FnHListerAux[F, A => R],
u: FnUnHListerAux[A => R, F]): F =
{ (args: A) =>
require(shell != null, "Shell cannot be null")
require(shell.getDisplay() != null, "The shell must have a display")
val display = shell.getDisplay()
display.asyncExec(new Runnable() {
def run(): Unit = {
try {
success.hlisted(args)
} catch {
case e: Throwable =>
failure(e)
}
}
})
dummy.hlisted(args)
}.unhlisted
如果你需要像這樣的無意義的東西,你的算法必定會有一些嚴重的問題。試着解釋你需要什麼。 – 2012-07-18 00:45:26
當然,這是一個好主意。我對Scala很陌生。我仍然很好奇,看看你是否真的可以取代一個函數的主體。但是,對於我的實際問題,解決方案很可能存在於不成形的圖書館中,這超出了我的知識水平,我仍然試圖理解它的本質。 – Hakkar 2012-07-18 00:58:03