Scala特征函数

mCs*_*mCs 3 scala

我们有三个功能.第一个定义布尔条件的类型别名

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.

  • 问题1:函数的逻辑在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)
  • 问题2:来自哪里set?它不在正式的参数列表中.

Tza*_*har 6

问题1:是的,你必须传递一个Set可能是函数的"实现".这个练习的重点(Odersky的课程?)是为了表明Set不能被定义为项目的集合(集合的"通常"定义),而是作为一个函数来说明项目是否包含在是否设定.所以Set 就是这个功能.

问题2: set是我们在这里返回的匿名函数的参数的名称:因为我们所说singletonSet的返回类型Set实际上是类型函数Int => Boolean,所以我们返回一个(匿名)函数.要创建这样的函数,可以使用语法x => f(x),其中x包含您想要的任何名称,并且f(x)是使用它的表达式(或不使用).