换句话说,FunctionN特征的用途是什么?它们是否存在以使编译器知道如何将函数视为第一类值?即当函数接受另一个函数作为参数时,编译器需要FunctionN来进行类型检查吗?
我想确保正确理解答案here,遗憾的是没有足够的声誉点来评论现有答案。
答案 0 :(得分:3)
FunctionN特征的目的是什么?
它们为大多数特性提供相同的目的,创建结构并提供对具体实现的共同抽象。当您使用anonymous function syntax时,底层编译器会使用FunctionN
,并通过它apply
方法提供实现。
它们是否存在以使编译器知道如何将函数视为第一类值
同样,它们存在于为Scala中的函数创建调用约定,因为方法不具有类型系统所具有的值。它们是类型系统表达匿名函数的底层实现,匿名函数是类型系统中的第一类值。
当函数接受另一个函数作为参数时,编译器需要FunctionN来进行类型检查吗?
FunctionN
是一个类似于任何其他类型的类型,其中类型检查与任何其他类型一样。有一点需要注意的是,编译器实际上是意识的特征和底层实现,因为它必须将它用于函数值。
答案 1 :(得分:1)
为什么Scala 函数类型符合
FunctionN
特征?
简化类型系统:替代方案是什么?将函数类型添加到类型系统。但是,为什么要将类型系统中的函数类型添加到类型系统中,只需使用Scala已经具有的简单多态名义特征。
你需要一些类型的功能。您可以添加函数类型,也可以使用已存在的函数:通用特征。 Scala的主要目标之一是简单性。