I właśnie o garnki z Tony Morris' excellent exercise on catamorphisms, kiedy zastanawiałem się, co dzieje się w następującej sytuacji ...Scala rodzaj wnioskowania pytanie
def cata[X](some: A => X, none: => X): X
Pozwól teraz wywołać tę metodę w następujący sposób:
def isDefined: Boolean = cata(_ => true, false)
Zastanawiam się, czy inferencer typów określa typ _ => true
na A => Boolean
lub Any => Boolean
. Ze względu na fakt, że Function1
jest przeciwwskazane wariant w parametrze wejściowym, oba z następujących kompilacji dobrze:
def isDefined: Boolean = cata((_: A) => true, false) //#1
def isDefined: Boolean = cata((_: Any) => true, false) //#2
Więc pytanie brzmi, czy typ inferencer wymyślić nr 1 lub nr 2?
Którą wersję 'skalaka' używasz? –
Używam 2.8.0 RC2 –