在 Scala 语言中将其作为函数的返回值时,"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 = $$Lambda$1148/1409513883@5a0e0886
scala> res0("WxYz")
res1: String = wxyz

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

类型位置的箭头只是特征Function1[+T1,-R]的简写,所以String => String脱糖成Function1[String,String]。它称为函数类型。

有趣的是,可以使用任何将两个类型参数作为中缀运算符的类型构造函数,例如,您可以滚动自己的(诚然相当无用(Tupler:

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

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

相关内容

最新更新