=>、()=>和Unit=>之間有什么區別?我試圖表示一個不帶參數且不返回值的函數(如果您必須知道的話,我將在JavaScript中模擬setTimeout函數)。case class Scheduled(time : Int, callback : => Unit)不編譯,說“‘val’參數可能不是按名調用”。case class Scheduled(time : Int, callback : () => Unit)編譯,但必須奇怪地調用,而不是Scheduled(40, { println("x") } )我必須這么做Scheduled(40, { () => println("x") } )同樣有效的是class Scheduled(time : Int, callback : Unit => Unit)但卻以一種更不明智的方式被調用。 Scheduled(40, { x : Unit => println("x") } )(單元類型的變量是什么?)我想要當然,它是一個構造函數,如果它是一個普通函數,可以我調用它的方式調用它: Scheduled(40, println("x") )把他的瓶子給孩子!
3 回答
狐的傳說
TA貢獻1804條經驗 獲得超3個贊
case class Scheduled(time : Int, callback : => Unit)
casevalcaseval callbacklazy val callback.
callback: () => Unitval callback
Scheduled(40, println("x") )caseapply
class Scheduled(val time: Int, val callback: () => Unit) {
def doit = callback()}object Scheduled {
def apply(time: Int, callback: => Unit) =
new Scheduled(time, { () => callback })}scala> Scheduled(1234, println("x"))res0: Scheduled = Scheduled@5eb10190
scala> Scheduled(1234, println("x")).doit
x
qq_花開花謝_0
TA貢獻1835條經驗 獲得超7個贊
class Scheduled(time: Int, cb: => Unit) {
private def runCb = cb}object Scheduled {
def apply(time: Int, cb: => Unit) = {
val instance = new Scheduled(time, cb)
Thread.sleep(time*1000)
instance.runCb }}scala> Scheduled(10, println("a")); Scheduled(1, println("b"))a
b添加回答
舉報
0/150
提交
取消
