Хорошо, вопрос может не сказать много, но вот сделка:
Я изучаю scala и решил создать служебный класс "FuncThread" с методом, который получает функцию параметра по имени (я думаю, она вызывается так, потому что это функция, но без списка параметров), а затем запускает поток с запускаемым который в свою очередь выполняет переданную функцию, я написал такой класс следующим образом:
class FuncThread
{
def runInThread( func: => Unit)
{
val thread = new Thread(new Runnable()
{
def run()
{
func
}
}
thread.start()
}
}
Тогда я написал тест junit следующим образом:
@Test
def weirdBehaivorTest()
{
var executed = false
val util = new FuncThread()
util.runInThread
{
executed = true
}
//the next line makes the test pass....
//val nonSense : () => Unit = () => { Console println "???" }
assertTrue(executed)
}
Если я раскомментирую вторую закомментированную строку, тест пройден, но если он остается закомментированным, тест не пройден, это правильное поведение? как и когда выполняются функции параметров по именам?
Я знаю, что у Scala есть библиотека актеров, но я хотел попробовать это, так как всегда хотел сделать это на Java