Функции высокого порядка scala - PullRequest
0 голосов
/ 30 мая 2018

Предположим, у нас есть определение и вызов этой функции:

def sayHello(prefix:String):(String => String) = {
  n => s"$prefix $n"
}

val greeting = sayHello("Hello")
greeting("Gio")

Используя Intellij, я вижу, что переменная "n" внутри функции имеет тип String .

Почему переменная, не объявленная ранее, выводится Scala как String?

Я понимаю, что функция высокого порядка возвращает функцию String => String,но я не вижу связи между этими двумя понятиями.

Не могли бы вы дать мне разъяснения по этому поводу?

1 Ответ

0 голосов
/ 30 мая 2018

n в вашем примере не является переменной.Это аргумент (небольшое семантическое различие).n => x нотация представляет функцию, принимающую n и возвращающую x.

Поскольку вы определили возвращаемое значение вашего sayHello как функцию String => String, единственное, что вы можете здесь вернуть, это функция, принимающая String и возвращающая String.Вот почему вы можете пропустить тип аргумента для вашего n.С текущим определением sayHello ясно, что n может быть только String.

Если вы не определили тип возвращаемого значения sayHello, scala потребует от вас указать типаргумента n, поскольку он не может вывести его из определения функции:

def sayHello(prefix:String) = {
    n: String => s"$prefix $n"
}

В вышеприведенном примере возвращаемое значение sayHello выводится из его тела, чтобы быть String => String.

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