gpt4 book ai didi

scala - scala set.contains 的实现

转载 作者:行者123 更新时间:2023-12-04 10:47:14 24 4
gpt4 key购买 nike

type Set = Int => Boolean
/**
* Indicates whether a set contains a given element.
*/
def contains(s: Set, elem: Int): Boolean = s(elem)

为什么会这样 contains功能工作?

我不明白。 ()怎么办运算符返回 true/ false关于这个元素在集合中的存在?

最佳答案

逐条来看,第一行的类型别名意味着我们可以将第二行改写如下:

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, Boolean], elem: Int): Boolean = s.apply(elem)

如果你看看 the apply method on Function1 你会看到类型排列。

就是这样——我们只是将集合表示为它的 indicator function然后将其埋在三层语法糖之下。

更新以解决评论:将集合表示为其指标函数可以比通常的基于列表的表示更自然地对无限集合(和许多其他集合)进行建模。例如,假设我想要一组所有奇数。使用您在这里的表示,这很容易:
val odds: Set[Int] = (_ % 2 != 0)

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

关于scala - scala set.contains 的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25973770/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com