Что означает нотация «String => String», когда она указывается в качестве возвращаемого значения функции в языке Scala? - PullRequest
0 голосов
/ 09 февраля 2019

У меня есть это сомнение, например, в следующем определении функции (в частности, в типе возвращаемого значения "String => String"):

def myFunction(line: String): String => String = {
    _.toLowerCase()
}

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 09 февраля 2019

Эта стрелка в позиции типа является просто сокращением для черты Function1[+T1,-R], поэтому String => String переводится в Function1[String,String].Она называется Тип функции .

Забавно, что можно использовать любой конструктор типов, который принимает два параметра типа в качестве оператора infix , например, вы можете свернуть свой собственный(по общему признанию довольно бесполезный) Туплер:

type Pair[T1,T2]=Tuple2[T1,T2]
val a: String Pair String = ("this","that") 

Единственное, что делает эту стрелку несколько особенной, - это то, что у нее есть собственное имя в спецификации языка и его ассоциативность справа (примечание: вы также можете определить свое право-ассоциативные операторы, но их имя оканчивается на :).

0 голосов
/ 09 февраля 2019

Небольшое время, проведенное в Scala REPL, демонстрирует, что происходит.

Welcome to Scala 2.12.7 (OpenJDK 64-Bit Server VM, Java 10.0.2).
Type in expressions for evaluation. Or try :help.

scala> def myFunction(line: String): String => String = {
     |     _.toLowerCase()
     | }
myFunction: (line: String)String => String

scala> myFunction("ABCD")
res0: String => String = $$Lambda$1148/1409513883@5a0e0886

scala> res0("WxYz")
res1: String = wxyz

Обратите внимание, что 1-й переданный аргумент "ABCD" ничего не делает.Это строка, которая передается в возвращаемую функцию, res0, которая преобразуется.

...