Я не знаю почему, но похоже, что использование {} или () при создании класса меняет поведение. Используя следующий класс,
class Coder(code: => Unit) {
def exec = {
println("before")
code
println("after")}
}
}
scala> val brackets = new Coder {println("testing")}
testing
brackets: Coder = $anon$1@1af7a03
scala> brackets exec
before
after
Теперь вместо этого, если определено иначе,
scala> val parens = new Coder(println("testing"))
parens: Coder = Coder@dca3ed
scala> parens exec
before
testing
after
по желанию. Похоже, что в первой записи компилятор интерпретирует скобки как блок, который должен оцениваться как Unit
, вместо анонимной функции, которая при вызове оценивается как Unit
.
FWIW, использование ({...}) также отлично работает.