我们有三个功能.第一个定义布尔条件的类型别名
type Set = Int => Boolean
Run Code Online (Sandbox Code Playgroud)
我知道这是别名的定义.现在是第二个功能
def contains(set: Set, elem: Int): Boolean = set(elem)
Run Code Online (Sandbox Code Playgroud)
调用(Int=>Boolean)上elem:Int.
Set哪里?我的意思是,在调用eg 时,我是否必须传递Set函数实际参数(在这种情况下contains是更高阶函数)contains.对于偶数集:
val in:Boolean = contains({x=>(x%2)==0},2)
在第三个功能:
def singletonSet(elem: Int): Set = set => set == elem
Run Code Online (Sandbox Code Playgroud)
set?它不在正式的参数列表中.问题1:是的,你必须传递一个Set可能是函数的"实现".这个练习的重点(Odersky的课程?)是为了表明Set不能被定义为项目的集合(集合的"通常"定义),而是作为一个函数来说明项目是否包含在是否设定.所以Set 就是这个功能.
问题2: set是我们在这里返回的匿名函数的参数的名称:因为我们所说singletonSet的返回类型Set实际上是类型函数Int => Boolean,所以我们返回一个(匿名)函数.要创建这样的函数,可以使用语法x => f(x),其中x包含您想要的任何名称,并且f(x)是使用它的表达式(或不使用).