繁体   English   中英

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

[英]How scala inferred types in this code examples?

嗨,我是Scala和一般编程人员的新手。 我在Coursera上参加了Scala课程,其中一项任务是创建以集合为参数的函数,然后返回另一个集合,即2个集合的并集/相交/差。 这是交叉点的解决方案:

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

可变集的通用特征。

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

实施说明:此特征提供Set的大多数操作,而与它的表示无关。 它通常由集合的具体实现继承。

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

def contains(key: A): Boolean
def iterator: Iterator[A]
def +(elem: A): This
def -(elem: A): This

从去年在Coursera上的scala课程:

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,而x != 3 f(x)返回false。

您给出的示例:

def intersect(s: Set, t: Set): Set = elem => s(elem) && t(elem)

仅在您之前定义类型SetInt => Boolean

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

List(1,2,4,5).filter(elem => elem < 4) = List(1, 2) 

这里发生的是相同的。 我们定义一个变量“ elem”,并通过它的约束s(elem)&& t(elem)来定义它。

至于为什么它不能在命令行中工作,我相信为Set定义了一个“类型”,而不是普通的Set。 看代码

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM