Scala特征函数

时间:2016-08-21 11:39:57

标签: scala

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

type Set = Int => Boolean

我知道这是别名定义。现在是第二个功能

def contains(set: Set, elem: Int): Boolean = set(elem)

调用(Int=>Boolean)上的elem:Int

  • 问题1 Set下函数的逻辑在哪里?
  • 我的意思是,在调用Set时,我是否必须传递contains函数实际参数(在这种情况下contains是更高阶函数)。对于偶数集:

    val in:Boolean = contains({x=>(x%2)==0},2)

在第三个功能中:

def singletonSet(elem: Int): Set = set => set == elem
  • 问题2: set在哪里形成?它不在正式参数列表中。

2 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:2)

1)由于Set是一个函数,contains确实是一个高阶函数,它接受一个函数和一个适当类型的元素,并将该函数应用于该元素。它的逻辑是集合由布尔值函数表示,其中元素当且仅当它在相应的集合中时才计算为true。函数contains计算元素的函数并返回其值,该值为truefalse,具体取决于它是否在集合中。

2)singleton返回一个匿名函数,当且仅当输入(true)等于所讨论的元素时,该函数的计算结果为set