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
.