scala set.contains的实现

前端之家收集整理的这篇文章主要介绍了scala set.contains的实现前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
type Set = Int => Boolean
/**
* Indicates whether a set contains a given element.
*/
def contains(s: Set,elem: Int): Boolean = s(elem)

为什么这包含功能

我不明白.
()运算符如何返回true / false关于set中此元素的存在?

解决方法

逐个采用这种方式,第一行中的类型别名意味着我们可以重写第二行,如下所示:

def contains(s: Int => Boolean,elem: Int): Boolean = s(elem)

但是A => B只是Function1[A,B]的语法糖,所以我们可以做更多的重写:

def contains(s: Function1[Int,Boolean],elem: Int): Boolean = s(elem)

s(elem)也是语法糖 – 任何时候你以这种方式“将值”应用于某个值,Scala将它变为s.apply(elem):

def contains(s: Function1[Int,elem: Int): Boolean = s.apply(elem)

如果你看一下the apply method on Function1,你会看到这些类型排列.

所以就是这样 – 我们只是将该集合表示为indicator function,然后将其隐藏在三层语法糖之下.

更新以解决注释:将一个集合表示为其指标函数,可以比通常的基于列表的表示更自然地模拟无限集(以及许多其他集).例如,假设我想要一组所有奇数.使用此处的表示,这很容易:

val odds: Set[Int] = (_ % 2 != 0)

例如,尝试使用HashSet做同样的事情.

猜你在找的Scala相关文章