関数のリストを受け取るケースクラスがあります。
case class A(q:Double, r:Double, s:Double, l:List[(Double)=>Double])
20以上の関数を定義しています。これらの関数の一部には独自のパラメーターがあり、一部の関数はcaseクラスの、、、および値q
もr
使用します。s
2つの例は次のとおりです。
def f1(w:Double) = (d:Double) => math.sin(d) * w
def f2(w:Double, q:Double) = (d:Double) => d * q * w
問題は、ケースクラスをインスタンス化するときに、、、およびを2回q
参照r
する必要があることです。s
A(0.5, 1.0, 2.0, List(f1(3.0), f2(4.0, 0.5))) //0.5 is referenced twice
次のようにクラスをインスタンス化できるようにしたいと思います。
A(0.5, 1.0, 2.0, List(f1(3.0), f2(4.0))) //f2 already knows about q!
これを達成するための最良のテクニックは何ですか?ケースクラスが拡張する特性で関数を定義できますか?
編集:実際のアプリケーションには、3つではなく7つのメンバーがあります。メンバーにアクセスする必要がある関数はごくわずかです。ほとんどの関数はそれらを気にしません。