Mam fragment kodu, którego nie mogę się zachowywać tak, jak bym chciał. Mam klasy zdefiniowane w następujący sposób (okrojona do tego):Typ argumentu zamknięcia wielu parametrów nie wywnioskowany
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)))
}
}
Podczas gry z tej klasy starałem się coś, co myślałem byłoby trywialne:
val beh = Behaviour(time => 5)
val beh2 = Behaviour(time => 5)
beh.map1(beh2, (a, b) => a + b)
Na ostatnim linia i pojawia się następujący błąd:
<console>:13: error: missing parameter type
beh.map1(beh2, (a, b) => a + b)
^
mogę oczywiście określić typy parametrów zamknięcia i działa poprawnie, ale dlaczego nie wpisać pracę wnioskowania tutaj? Oczywiście mogłem również określić typy ogólne dla tej funkcji (patrz niżej dla obu rozwiązań).
Myślałem, że Scala przeprowadził "skanowanie", aby wywnioskować typy i zobaczyłby beh2
i przeszedł do funkcji i przyjmie U
tutaj, aby być Int
. Czy jest jakiś sposób mogę to naprawić bez określenia typów parametrów wejściowych (dla zamknięcia lub generics)?
EDIT: Przykłady dwóch poprawek mam:
beh.map1[Int, Int](beh2, (a, b) => a + b)
beh.map1(beh2, (a, b : Int) => a + b)
Dziękuję bardzo, że działa dobrze! Przyjmuję odpowiedź, jeśli nikt nie może wyjaśnić, co się dzieje następnego dnia. – seadowg