Типы и методы метода 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"
  }
}

Ответы на вопрос(3)

Ваш ответ на вопрос