Получил функцию вместо метода, даже используя `def` - PullRequest
0 голосов
/ 30 сентября 2019

Почему даже при использовании 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>. Они действительно разные?

1 Ответ

1 голос
/ 30 сентября 2019

Нет, это метод, который возвращает функцию Int => Unit. Вы получите это hello: Int => Unit = <function1> при вызове метода, привет с версией scala 2.12.

При наличии версии выше версии Scala вы получите тип Int => Unit = $$Lambda$1047/1845297077@184fb68d вместо hello: Int => Unit = <function1>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...