私は、私が望むような振る舞いをすることができないコードを持っています。私は(このためにストリップダウン)、次のように定義されたクラスを持っている:複数のパラメータクロージャ引数型が推測されない
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)))
}
}
私は些細なことだろうと思ったものにしようとした、このクラスで遊ん:最後のために
val beh = Behaviour(time => 5)
val beh2 = Behaviour(time => 5)
beh.map1(beh2, (a, b) => a + b)
私はもちろん閉鎖パラメータの型を指定することができます
<console>:13: error: missing parameter type
beh.map1(beh2, (a, b) => a + b)
^
、それが正常に動作しますが、なぜここ推論作業を入力していない:行は、私は次のエラーを受け取りますか?もちろん、関数のジェネリック型を指定することもできます(両方のソリューションについては以下を参照してください)。
スカラはタイプを推測するために「スキャン」を実行し、beh2
と表示され、関数に渡され、ここでがInt
と仮定したと考えました。入力パラメータのタイプ(クロージャーまたはジェネリックス)を指定せずにこれを解決できる方法はありますか?
編集:私は持っている2つの修正の例:この問題を解決する方法の
beh.map1[Int, Int](beh2, (a, b) => a + b)
beh.map1(beh2, (a, b : Int) => a + b)
ありがとうございました。翌日に何が起こっているのか説明できない場合は、私はその答えを受け入れます。 – seadowg