Scala型推理问题
我只是在胡思乱想,当我在思考下面的情况时Scala型推理问题,scala,type-inference,catamorphism,Scala,Type Inference,Catamorphism,我只是在胡思乱想,当我在思考下面的情况时 def cata[X](some: A => X, none: => X): X 现在让我按如下方式调用此方法: def isDefined: Boolean = cata( _ => true, false) 我想知道类型推断器是否将\u=>true的类型确定为A=>Boolean或Any=>Boolean。由于Function1在其输入参数中是反变的,因此以下两项都可以正常编译: def isDefined: Boolean =
def cata[X](some: A => X, none: => X): X
现在让我按如下方式调用此方法:
def isDefined: Boolean = cata( _ => true, false)
我想知道类型推断器是否将\u=>true
的类型确定为A=>Boolean
或Any=>Boolean
。由于Function1
在其输入参数中是反变的,因此以下两项都可以正常编译:
def isDefined: Boolean = cata( (_: A) => true, false) //#1
def isDefined: Boolean = cata( (_: Any) => true, false) //#2
所以问题是,类型推断器会得出1还是2?我试过:
trait MyOption[+A] {
def cata[X](some: A => X, none: => X): X
def isDefined: Boolean = cata( _ => true, false)
}
并用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)
}
}
因此,从外观上看,类型推断器提出了选项#1。您使用的是哪个版本的
scalac
?