1
これはうまくいくと思いました。私は間違ったことをしていますか?ラムダ計算:Scalaで適用
val apply = (f: Any => Any, v: Any) => f(v)
val square = (x: Int) => x * x
私は(正方形、10)を適用する想像は100
ことになる。しかし、私はエラーを取得する:
:15: error: type mismatch;
found : Int => Int
required: Any => Any
apply(square, 100)
私がここで行方不明ですか?
追加してください: 'apply apply'の定義を' def apply [T] =(f:T => T、v:T)=> f(v) 'に変更すると、このように、v、fの入力とfの出力の型は同じ型であることが分かっているからです。 –
@TzachZohar 'apply [Any]'と 'apply [Int]'は本質的に2つの異なる関数であるため、「同じ型であることがわかっている」ためではありません。この場合。 – Dima
@Dima、関数が引数に反例がある場合、Any => IntはInt => Intのサブクラスであると言うことができますか? –