Scala 为了理解2.9和2.10中的不同行为
Scala 2.10似乎已经更新了这两个版本的理解能力。 在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>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))