Scala 为了理解2.9和2.10中的不同行为

Scala 为了理解2.9和2.10中的不同行为,scala,Scala,Scala 2.10似乎已经更新了这两个版本的理解能力。 在2.10中: scala>vala=Right(5) a:scala.util.Right[Nothing,Int]=Right(5) scala>用于{aa:Int 必需:scala.util.Nothing,Int]=>? 对于{aa:Int val a=Right(5) 答:对[无,整数]=对(5) scala>对于{aa:Int来说,这似乎是因为它添加了和filter,即使它不是必需的 在2.10中,使用-Xprint:type

Scala 2.10似乎已经更新了这两个版本的理解能力。 在2.10中:

scala>vala=Right(5)
a:scala.util.Right[Nothing,Int]=Right(5)
scala>用于{aa:Int
必需:scala.util.Nothing,Int]=>?
对于{aa:Int val a=Right(5)
答:对[无,整数]=对(5)

scala>对于{aa:Int来说,这似乎是因为它添加了
和filter
,即使它不是必需的

2.10
中,使用
-Xprint:typer编译下面的代码

for {aa <- a.right} yield {aa}

Temp.this.a.right.map[Int](((aa: Int) => aa))

 //for below
for {aa:Int <- a.right} yield {aa}

a.right.filter[Nothing](((check$ifrefutable$1: Int) => (check$ifrefutable$1: Int @unchecked) match {
  case (aa @ (_: Int)) => true
  case _ => false
})).map[B](((aa: Int) => aa))

2.10
中,添加了
带过滤器的
子句。来自:

翻译方案如下:第一步,每个生成器 p假}

在第一种情况下,
p
是(规范中的点-1),所以不添加withFilter。在第二种情况下,
p
是(点-2,所以不应添加withFilter)。但它确实添加了,这是一个错误


类似的阅读:

非常好的答案,谢谢!我以前不知道-Xprint:typer。它是一个非常整洁的工具。
scala> val a = Right(5)
a: Right[Nothing,Int] = Right(5)

scala> for {aa: Int <- a.right} yield {aa}
res0: Product with Serializable with Either[Nothing,Int] = Right(5)
for {aa <- a.right} yield {aa}

Temp.this.a.right.map[Int](((aa: Int) => aa))

 //for below
for {aa:Int <- a.right} yield {aa}

a.right.filter[Nothing](((check$ifrefutable$1: Int) => (check$ifrefutable$1: Int @unchecked) match {
  case (aa @ (_: Int)) => true
  case _ => false
})).map[B](((aa: Int) => aa))
a.right.map[Int](((aa: Int) => aa))