Типы и методы метода Scala в качестве параметров
В следующем примере кода я не понимаю, почему функцию fun можно передать в качестве аргумента методуaddAction
, Методfun
имеет типUnit
в то время как методaddAction
ожидает функцию типа() => Unit
.
Еслиfun
имеет тип() => Unit
то почему компилятор жалуется чтоfun
имеет типUnit
когда я пытаюсь добавитьfun
к списку действий:actions = fun :: actions
?
package myscala
object MyScala {
def fun() { println("fun1 executed.") }
def addAction(a: () => Unit) {
actions = a :: actions
}
var actions: List[() => Unit] = List()
def main(args: Array[String]) {
// the following line would produce a compiler error (found: Unit, required: () => Unit), it's OK
// actions = fun :: actions
actions = (() => fun) :: actions // OK
// I would expect the same compiler error here (found: Unit, required: () => Unit), but it's OK why?
addAction(fun)
actions.foreach(_()) // prints twice "fun1 executed"
}
}