全面披露:我正在(曾经?)参加 Coursera 的 Scala 课程,但被 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
并返回一个布尔值。但是……什么?所以作为一名 JavaScript 开发者,我决定翻译它:
function singletonSet(elem) {
return function(x) {
return x === elem;
};
};
那么我可以写(我在骂人吗?):
singletonSet(3)(4)
// singletonSet(3) => returns an anonymous function, function(x) { x === 3; };
// function(4) { return 4 === 3; }
// false
如果这甚至接近 Scala 中发生的情况,那么我似乎没有创建一个单例集。相反,我只是在检查两个数字是否相同。
我在这里想念什么?我觉得它必须是非常基本的东西。
提前致谢。