scala之我对 Scala Sets 的理解有什么问题
完全披露:我正在(曾经?)参加 Coursera 的 Scala 类(class),但被关于 Sets 的第二个作业难倒了。我不只是在寻找答案(很容易获得)并且无论如何都会获得边际信用。但我真的很想了解发生了什么。
好的,所以这是第一个问题:“定义一个函数,它从一个整数值创建一个单例集:该集表示一个给定元素的集。”所以我的第一次尝试是这样的:
def singletonSet(elem: Int): Set = Set(elem)
所以这个函数 singletonSet
只返回一个新创建的 Set。它可以这样调用:
val why = singletonSet(3)
// now why is a singleton set with a single integer, 3
这个实现看起来微不足道,所以我用谷歌搜索了答案,似乎是这样的:
def singletonSet(elem: Int): Set = (x => x == elem)
现在我的理解是 (x => x == elem)
是一个匿名函数,它接受一个整数 x
并返回一个 bool 值。但是……什么?因此,作为一名 JavaScript 开发人员,我决定翻译它:
function singletonSet(elem) {
return function(x) {
return x === elem;
};
};
然后我可以写(我在柯里化(Currying)吗?):
singletonSet(3)(4)
// singletonSet(3) => returns an anonymous function, function(x) { x === 3; };
// function(4) { return 4 === 3; }
// false
如果这与 Scala 中发生的情况非常接近,那么我似乎没有在创建单例集。相反,我只是检查两个数字是否相同。
我在这里错过了什么?我觉得这一定是一些非常基础的东西。
提前致谢。
请您参考如下方法:
记住这个集合的实现是一个函数。特别是它是一个 bool 函数,所以该函数可以看作是在问这个问题:“这个数字在集合中吗?- 真还是假。”您可以根据需要多次调用该函数,实际上是多次询问该问题:
“这个数在集合中吗?那个数在集合中吗?”等等等等
由于集合是单例集合,所以集合中只有一个数。因此,您通过调用该函数来使用该集合,并提出问题,实际上,“这个数字是集合中唯一且唯一的数字吗?” 所以你是对的这个集合,单例集合只是在问这两个数字是否相同。
需要强调的是,这个例子来自《Scala 中的函数式编程原理》类(class)。本类(class)并不意味着对 Scala 的简单介绍。实际上这门课是故意刁难的,目的是让大家对函数式编程有更深刻的理解。通常人们只会使用范围内不可变的 Set 类。
如果你想处理 -1000 到 1000 之间的偶数,你可能会使用像这样的迭代器:
(-1000 to 1000).withFilter(_ %2 == 0)
或:
(-1000 to 1000 by 2)
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。