0
在C++中,可以通過靜態成員實現具有靜態註冊回調的調度器回調模式。然而,在Scala中,所有對象都被懶惰地初始化了,所以下面的代碼在C++中並不是真正的類似的東西。如何在Scala中靜態註冊回調?
object Main {
var callbacks = List[()=>Unit]()
def main(args: Array[String]): Unit = {
println("hello")
callbacks.foreach { _() }
}
}
object A {
val callbackA =() => println("A")
Main.callbacks = callbackA::Main.callbacks
}
object B {
val callbackB =() => println("B")
Main.callbacks = callbackB::Main.callbacks
}
object C {
val callbackC =() => println("C")
Main.callbacks = callbackC::Main.callbacks
}
當運行該程序中,沒有回調被調用時,因爲對象A,B,和C被從未初始化和註冊被從未執行。 Scala中有沒有一種方法可以正確實現我在這裏的目標?
中的代碼A'''B'和'C'實際上是永遠不會運行。所以你的'main'方法只是用'foreach'迭代一個空集合。我不確定你的意圖是什麼。 – PermaFrost
@PermaFrost假設類似的東西是用C++和Java編寫的,它們會起作用。我想知道是否有可能在Scala中做同樣的事情。具體而言,我希望在調度員不知道他們存在的情況下注冊回調。就像LLVM通行證如何註冊一樣。 – uraj
也許你應該證明你會如何用Java編寫它。 Java的靜態成員也被懶惰地初始化了。 –