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