【发布时间】:2015-07-27 16:59:27
【问题描述】:
$ scala
Welcome to Scala version 2.10.4 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_79).
Type in expressions to have them evaluated.
Type :help for more information.
scala> Iterator(2,4,6)
res0: Iterator[Int] = non-empty iterator
scala> res0.filter
filter filterNot
scala> res0.filter
def filter(p: A => Boolean): Iterator[A]
// 鉴于过滤器的这个定义,我希望下面的表达式(1)可以工作:
scala> Iterator(2,4,6).filter(Set(1,2,3).contains).toSet
res1: scala.collection.immutable.Set[Int] = Set(2)
// 问题 #1: 下面的表达式 (2) 是如何工作的?它从哪里得到A => Boolean 推断?我的意思是问,布尔值是从哪里来的?
scala> Iterator(2,4,6).filter(Set(1,2,3)).toSet
res2: scala.collection.immutable.Set[Int] = Set(2)
// 问题 #2:(1) 和 (2) 哪个更好表达,为什么?
// 在 List 上尝试了同样的事情,我希望这能奏效。
scala> List(2,4,6).filter(List(1,2,3).contains)
res3: List[Int] = List(2)
// 问题 #3: 为什么它对 Iterator 神奇地起作用却不起作用?
scala> List(2,4,6).filter(List(1,2,3))
<console>:8: error: type mismatch;
found : Int(1)
required: Boolean
List(2,4,6).filter(List(1,2,3))
【问题讨论】:
标签: list scala filter iterator