"String => String" 符号在 Scala 语言中将其作为函数的 return 值时是什么意思?

What does "String => String" notation mean when putting it as the return value of a function in Scala Language?

我有这个疑问,例如在下面的函数定义中(特别是在 return 类型“String => String”中):

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

提前致谢。

编辑:玩了一下 REPL 让我终于明白了这一点。

花点时间在 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 = $$Lambda48/1409513883@5a0e0886

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

请注意,第一个传递的参数 "ABCD" 没有执行任何操作。它是传递给返回函数的字符串,res0,已转换。

类型位置中的箭头只是特征 Function1[+T1,-R] 的 shorthand,因此 String => String 被脱糖为 Function1[String,String]。它被称为 Function type.

有趣的是,可以使用任何接受两个类型参数的类型构造函数作为 infix 运算符,例如,您可以推出自己的(无可否认相当无用)Tupler:

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

唯一使该箭头有些特别的是它在语言规范中有自己的名称及其右结合性(注意:您也可以定义右结合运算符,但它们的名称必须以 :).