2012-12-24 4 views
0

В следующем коде Scala ивыполняется ли анонимная функция, когда передается в качестве параметра

object Timer 
{ 
    def oncePerSecond(callback:() => Unit): Unit = 
    { 
    while (true) 
    { 
     callback() 
     Thread.sleep(1000) 
    } 
    } 

    def main(args: Array[String]): Unit = 
    { 
    oncePerSecond(() => 
     Console.println("Time flies... oh, you get the idea.")) 
    } 
} 

анонимной функция выполняется первый, когда передается в качестве параметра , а затем снова каждый второй в цикле?

ответ

4

Это выполняется как часть этого:.

while (true) 
{ 
    callback() 
    Thread.sleep(1000) 
} 

поэтому она будет выполнять каждый второй, начиная с момента, когда она передается в Это выполняется только в цикле. Он не будет выполняться нормально при передаче, например.

def oncePerSecond(callback:() => Unit): Unit = { 
    if (....) { 
     callback() 
    } 
} 

выполнил бы этот метод только в том случае, если выполнено определенное условие.

+0

Это было бы верно для * call-by-name * также –

Смежные вопросы