嗨,我是Scala和编程的新手 . 我在课程上学习了Scala课程,其中一项任务是创建将集合作为参数的函数,并返回另一个集合,这是两个集合的联合/交集/差异 . 这是交集的解决方案:
def intersect(s: Set, t: Set): Set = elem => s(elem) && t(elem)
我不明白这个元素 . Scala如何知道它是集合的一个元素,为什么如果在shell中尝试它会返回错误:缺少参数类型 .
结合和差异的解决方案(相同):
def union(s: Set, t: Set): Set = elem => s(elem) || t(elem)
def diff(s: Set, t: Set): Set = elem => s(elem) && !t(elem)
来自Scala Set:
可变集的一般特征 .
集合是不包含重复元素的集合 .
实施说明:该特征提供集合的大部分操作,与其表示无关 . 它通常由集合的具体实现继承 .
要实现具体集,您需要提供以下方法的实现:
def contains(key: A): Boolean
def iterator: Iterator[A]
def +(elem: A): This
def -(elem: A): This
2 回答
从去年的课程上的scala课程:
即
Set
不引用预定义的scala特征,而是引用Int
作为参数并返回Boolean
的函数 . 例如 . 包含单个元素的集合{3}
由函数f(Int)
表示,其中f(3)
返回true,f(x)
,x != 3
返回false .你给出的例子:
仅在您之前将类型
Set
定义为Int => Boolean
时才有效 .可以使用过滤功能绘制并行:
这里发生的事情是一样的 . 我们定义一个变量“elem”,并通过其约束来定义它,即s(elem)&& t(elem)用于并集 .
至于为什么它在命令行中不起作用,我认为“类型”是为Set定义的而不是普通的Set . 查看代码