Ну, проблема в том, что вы все неправильно поняли. : -)
Вот некоторые концептуальные ошибки:
def dream()() = {
println("~Dream~");
new Exception().printStackTrace()
}
Это не частичная функция. Это карри метод с двумя пустыми списками параметров, который возвращает Unit
.
val map = scala.collection.mutable.HashMap[String,()=>Unit]()
Тип значений на этой карте - не частичная функция, а функция. В частности, Function0[Unit]
. Частичная функция будет иметь тип PartialFunction[T, R]
.
map("dream") = dream() // partial function
В данном случае Scala преобразует частично примененный метод в функцию. Это не простое задание. Scala выполняет преобразование, потому что модуль вывода типов может угадать правильный тип.
val check = dream() // unexpected invocation
Здесь нет ожидаемого типа, который помог бы в выводе типов. Однако пустые списки параметров могут быть опущены, так что это всего лишь вызов метода.