İstediğim şekilde davranamayacağım bir kod parçam var. (Bunun için soyunmuş) şu şekilde tanımlanan bir sınıf var:Birden çok parametre kapatma argümanı türü çıkarılamıyor
class Behaviour[T](private val rule: Time => T) {
def map1[U, V](behaviour: Behaviour[U], func: (T, U) => V): Behaviour[V] = {
new Behaviour(time => func(this.at(time), behaviour.at(time)))
}
}
ben önemsiz olacağını düşündüm bir şey çalıştı bu sınıfın uğraşırken: Geçen İçin
val beh = Behaviour(time => 5)
val beh2 = Behaviour(time => 5)
beh.map1(beh2, (a, b) => a + b)
satır aşağıdaki hatayı alırsınız:
<console>:13: error: missing parameter type
beh.map1(beh2, (a, b) => a + b)
^
tabii kapatma parametre türlerini belirtebilirsiniz ve düzgün çalıştığını ama neden burada çıkarım çalışmaları yazın etmiyor? Elbette fonksiyon için genel tipler de belirtebilirim (her iki çözüm için aşağıya bakınız).
Ben Scala türlerini anlamak için söz konusu 'tarama' yürütülen vebeh2
görmek ve işlevi geçirilen ve
Int
olmak için burada
U
farz düşündük. Giriş parametrelerinin türlerini belirtmeden bunu düzeltmemin bir yolu var mı (kapanma veya jenerik için)?
DÜZENLEME: sahip iki düzeltmeler örnekler: Bu sorunu çözmek için yollar
beh.map1[Int, Int](beh2, (a, b) => a + b)
beh.map1(beh2, (a, b : Int) => a + b)
Çok teşekkürler, gayet iyi çalışıyor! Ertesi gün gerçekleşecek olan şey için bir açıklama yapamazsa cevabı kabul edeceğim. – seadowg