oxb*_*kes 6 scala type-inference catamorphism
当我正在思考在以下情况下发生的事情的时候,我只是对托尼·莫里斯对猫咪的优秀演习进行了喋喋不休的讨论 ......
def cata[X](some: A => X, none: => X): X
Run Code Online (Sandbox Code Playgroud)
现在让我称这个方法如下:
def isDefined: Boolean = cata( _ => true, false)
Run Code Online (Sandbox Code Playgroud)
我想知道的类型是否inferencer确定的类型的_ => true要A => Boolean或Any => Boolean.由于输入参数Function1是反变量的事实,以下两个编译都很好:
def isDefined: Boolean = cata( (_: A) => true, false) //#1
def isDefined: Boolean = cata( (_: Any) => true, false) //#2
Run Code Online (Sandbox Code Playgroud)
所以问题是,类型推断器是出现#1还是#2?
我试过这个:
trait MyOption[+A] {
def cata[X](some: A => X, none: => X): X
def isDefined: Boolean = cata( _ => true, false)
}
Run Code Online (Sandbox Code Playgroud)
用这个编译scalac -Xprint:types.这给出了以下输出:
[[syntax trees at end of typer]]// Scala source: myoption.scala
package {
abstract trait MyOption[A >: Nothing : Nothing X, none: => X): X;
def isDefined: Boolean = MyOption.this.cata[Boolean](((x$1: A) => true), false)
}
}
Run Code Online (Sandbox Code Playgroud)
所以从它的外观来看,类型推理器提出了选项#1.
| 归档时间: |
|
| 查看次数: |
248 次 |
| 最近记录: |