例如,在以下函数定义中(特别是在返回类型"字符串=>字符串"中(,我有这个疑问:
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")
唯一使该箭头有些特别的是,它在语言规范中有自己的名称和右关联性(注意:您也可以定义右关联运算符,但它们的名称必须以:
结尾(。