Почему даже при использовании def
следующий синтаксис создает функцию, а не метод?
def hello = (a: Int) => {
println(a)
}
Это тип
hello: Int => Unit
И можно использовать.apply()
для него, как это можно сделать для функций (но не для методов):
hello.apply(5)
В то время как эти три других синтаксиса (я уверен, что есть и другие 1000 слегка отличающихся способов выражениятоже самое) производим методы:
// def name (args) : return_type = body
def hello(a:Int): Unit = {
println(a)
}
// with type inference for return type
def hello(a: Int) = {
println(a)
}
// without the '='
def hello(a: Int) {
println(a)
}
(тип для вышеперечисленных hello: (a: Int)Unit
)
Бонусный вопрос : тип первого hello
было hello: Int => Unit
. Кажется, это отличается от того, что вы получите, определив функцию: hello: Int => Unit = <function1>
. Они действительно разные?