首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >scala如何在此代码示例中推断类型?

scala如何在此代码示例中推断类型?
EN

Stack Overflow用户
提问于 2013-05-11 23:11:32
回答 2查看 251关注 0票数 0

大家好,我是Scala和一般编程的新手。我在coursera上上了一门Scala课程,其中一个作业是创建以集合为参数的函数,并返回另一个集合,这是两个集合的并/交/差。以下是交集的解决方案:

代码语言:javascript
复制
def intersect(s: Set, t: Set): Set = elem => s(elem) && t(elem)

我不明白元素的意思。Scala如何知道它是集合中的一个元素,以及为什么在shell中尝试它会返回错误:缺少参数类型。

联合和差异的解决方案(相同):

代码语言:javascript
复制
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

可变集合的通用特征。

集合是不包含重复元素的集合。

实现说明:此特征独立于集合的表示提供了集合的大部分操作。它通常由集合的具体实现继承。

要实现一个具体的集合,您需要提供以下方法的实现:

代码语言:javascript
复制
def contains(key: A): Boolean
def iterator: Iterator[A]
def +(elem: A): This
def -(elem: A): This
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-12 05:38:33

来自去年coursera上的scala课程:

代码语言:javascript
复制
object FunSets {
  /**
   * We represent a set by its characteristic function, i.e.
   * its `contains` predicate.
   */
  type Set = Int => Boolean
  // [...]
}

也就是说,Set并没有引用预定义的scala特征,而是引用了一个以Int作为参数并返回Boolean的函数。例如,包含单个元素{3}的集合由函数f(Int)表示,其中f(3)返回true,f(x) with x != 3返回false。

您给出的示例:

代码语言:javascript
复制
def intersect(s: Set, t: Set): Set = elem => s(elem) && t(elem)

仅当您以前将类型Set定义为Int => Boolean时才有效。

票数 1
EN

Stack Overflow用户

发布于 2013-05-11 23:25:51

可以使用滤波器函数绘制平行线:

代码语言:javascript
复制
List(1,2,4,5).filter(elem => elem < 4) = List(1, 2) 

这里发生的情况是一样的。我们定义一个变量"elem“,并通过它对联合的约束s(elem) && t(elem)来定义它。

至于为什么它在命令行中不起作用,我认为"type“是为Set定义的,而不是一个普通的Set。查看代码

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16498568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档