Bunun işe yarayacağını hayal ettim. Açıkça yanlış bir şey yapıyorum? Lambda hesabı: Scala'ya uygula
val apply = (f: Any => Any, v: Any) => f(v)
val square = (x: Int) => x * x
başvururum hayal (kare, 10) 100
neden olacaktır Ama bir hata alıyorum: Burada
:15: error: type mismatch;
found : Int => Int
required: Any => Any
apply(square, 100)
ne eksik?
Eklemeye değer: eğer 'apply' (soruda) tanımını değiştirirseniz, "T uygulanamazsınız" = (f: T => T, v: T) => f (v) ', iş, çünkü bu şekilde v, f'nin girişi ve f'nin çıktılarının aynı tip olduğu bilinir. –
@TzachZohar "Aynı türde olduğu bilinen" oldukları için değil (orijinal örnekte olduğu gibi), daha çok [Uygula] 'yı uygula ve [geçerli] uygula [uygula] temelde iki farklı işlevdir bu durum. – Dima
@Dima, eğer işlevler argümanlarında kontravaryant ise, Any => Int Int => Int? –