编译器在 Scala 中生成函数 class
Compiler generated function class in Scala
我明白当我这样做时:
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 是一个 class 为基于 Int 的 operations.We 使用 [] 来传达此 class 中的操作仅涉及(输入,输出,主体)Int。
[] 中的一个 Int 条目是否足以传达这一点。但是我们在 [].
中有 3 个 Int 条目
Function2
中没有任何内容表明它是 "made for Int based operations"。
Function2[X, Y, Z]
是通用函数的 class,它采用 X
和 Y
以及 return 和 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
,你可以定义一个类型别名:
type BinOp[T] = Function2[T, T, T]
或更短:
type BinOp[T] = (T, T) => T
我明白当我这样做时:
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 是一个 class 为基于 Int 的 operations.We 使用 [] 来传达此 class 中的操作仅涉及(输入,输出,主体)Int。 [] 中的一个 Int 条目是否足以传达这一点。但是我们在 [].
中有 3 个 Int 条目Function2
中没有任何内容表明它是 "made for Int based operations"。
Function2[X, Y, Z]
是通用函数的 class,它采用 X
和 Y
以及 return 和 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
,你可以定义一个类型别名:
type BinOp[T] = Function2[T, T, T]
或更短:
type BinOp[T] = (T, T) => T