私は最近 Scala を学んでいますが、今日、理解できない問題に遭遇しました。
次のパラメトリック関数定義があるとします。
def filter[T](source: List[T], predicate: T=>Boolean): List[T] = {
source match {
case Nil => Nil
case x::xs => if(predicate(x)) x::filter(xs, predicate)
else filter(xs, predicate)
}
}
さて、次のように呼び出すと、これはうまく機能します。
filter(List(1,2,3,4,5,6), ( (n:Int) => n % 2 == 0))
しかし、type タグを削除すると、Scala は T の型が Int であると推測できないようです。
filter(List(1,2,3,4,5,6), ( n => n % 2 == 0))
したがって、この呼び出しでは明示的な型情報を提供する必要があります。
この呼び出しで Scala が T の型を推論できない理由を知っている人はいますか? リストは明らかに Int のリストですが、n の型も Int であると推論できない理由がわかりません。