来自脑驱动发育
结果是,您将在Scala中定义的每个函数都将成为一个实现的实例,它将具有特定的功能特征。有很多这样的功能特征,从Function1到Function22。因为函数是Scala中的对象,Scala是一种静态类型的语言,所以它必须为每个函数提供一个适当的类型,每个函数都带有不同数量的参数。如果定义带有两个参数的函数,编译器将选择Function2作为基础类型。
同时,来自迈克尔·弗罗的博客
您需要为所需的每一个参数创建FunctionN类吗?是的,但是您只定义了一次类,然后就会永远使用它们,或者理想情况下它们已经在库中定义了(例如,Functional定义了类F、F2、.、F8,而Scala标准库定义了类Function1、.、Function22)
因此,我们有一个函数特征列表(Scala)和一个接口列表(Functional),以使我们能够拥有第一类函数。
我想弄清楚为什么会这样。我知道,以Java为例,当我编写一个方法时,
public int add(int a, int b){
return a + b;
}我不能继续写下去
add(3,4,5);(错误可能类似于:无法将方法添加应用于提供类型)
我们只需为具有不同参数的函数定义一个接口/特性,因为静态类型?
发布于 2012-12-30 19:04:53
我们必须在Scala中将函数作为头等对象来实现,不是吗?例如,当程序员将函数文字分配给变量时,该变量必须在运行时获得一些值,以类型安全的方式表示函数。Scala的实现者选择了FunctionN特性的工作方式。因此,Scala中函数的所有语法基本上只是实现的语法糖。例如,某些类型的(A, B C) => D的每个函数都成为一个在运行时具有Function3[A,B,C,D]类型的对象,因此,除其他外,实现了一个方法apply(p1: A, p2: B, p3: C): D。应用该函数是调用apply方法的语法糖等等。这也是Java如何与Scala函数进行互操作的方式。
https://softwareengineering.stackexchange.com/questions/177043
复制相似问题