次の状況で何が起こっているのかを考えていたとき、私はちょうどトニー・モリスの変容に関する優れた演習をポタリングしていました...
def cata[X](some: A => X, none: => X): X
このメソッドを次のように呼び出してみましょう。
def isDefined: Boolean = cata( _ => true, false)
型推論器が の型を or に決定するかどうか疑問に思ってい_ => true
ましA => Boolean
たAny => Boolean
。Function1
入力パラメーターが反変であるため、次の両方が問題なくコンパイルされます。
def isDefined: Boolean = cata( (_: A) => true, false) //#1
def isDefined: Boolean = cata( (_: Any) => true, false) //#2
問題は、型推論器が 1 番と 2 番のどちらを思いつくかということです。