Scala设置是否等同于谓词函数?

时间:2015-03-25 04:22:02

标签: scala

如何将集合作为过滤函数的可接受参数?

scala> val v1 = Set(1,2,3)
v1: scala.collection.immutable.Set[Int] = Set(1, 2, 3)

scala> val v2 = Set(2,3,4)
v2: scala.collection.immutable.Set[Int] = Set(2, 3, 4)

scala> v1 filter v2
res6: scala.collection.immutable.Set[Int] = Set(2, 3)

3 个答案:

答案 0 :(得分:2)

scala.collection.Set[A]扩展A => Boolean - 在Scala中,一组 是一个函数。

同样,Map[A, B]延伸A => BList[A]延伸Int => A

答案 1 :(得分:2)

Huw said it correctly:一个集合是一个函数。

Set将其类型的每个值映射到布尔值true含义"是的,我包含该值"和false含义"不,我不是。"

类似地,Map获取键类型的值并返回其值类型的值; List获取整数并返回该索引处的元素。

这不是Scala的特性,这是对Set,Map和List的含义的合理解释。

有趣的是,Set函数的域(" legal"输入)是该类型的所有值,而使用Map和List只允许值的子集。

答案 2 :(得分:0)

http://docs.scala-lang.org/overviews/collections/sets.html

集合的apply方法与contains相同。因此set(elem)与set contains elem相同。

v1 filter {x => v2.contains(x)}
~ v1 filter {v2.contains(_)}
~ v1 filter {v2.apply(_)}
~ v1 filter v2