编译器在Scala

时间:2018-03-15 02:59:09

标签: scala function compiler-construction

我理解当我这样做时:

val sum = (a: Int, b: Int) => a + b

Scala编译器把它变成了这个:

val sum = new Function2[Int, Int, Int] {
 def apply(a: Int, b: Int): Int = a + b
}

因此,Function2是为基于Int的操作而创建的类。我们使用[]来表示此类中的操作仅涉及(输入,输出,正文)Int。 []中的一个Int条目不仅足以表达这一点。但是我们在[]中有3个Int条目。

1 个答案:

答案 0 :(得分:3)

String.format中没有任何内容表明它是“基于Int的操作”。

final是一个泛型函数的类,它接受Function2Function2[X, Y, Z]类型的两个输入并返回X

指定单个Y显然是不够的,因为Z需要三个类型参数。

否则你怎么能区分

Int

Function2

例如在

Function2[Int, Int, Int]

的语法糖
Function2[Int, Double, String]

如果您经常将val sum = (a: Int, b: Double) => a + " -> " + b 用于同一类型val sum = new Function2[Int, Double, String] { def apply(a: Int, b: Double) = a + " -> " + b } ,则可以定义类型别名:

Function2[T, T, T]

或更短:

T