Function[K=>V, K=>V]
関数を受け取り、指定されたK=>V
関数の型を返す高階関数が欲しいのですが。たとえば、次のように動作させたいと思います。
class Foo[K, V]() {
def apply[K1 <: K, V1 <: V](f: K1 => V1) = f
}
// dummy class hierachy
class A
class B extends A
class C extends B
// a function f: B=>B
def f(some: B): B = some
// the desired result
val result1: B => B = new Foo[A, A]()(f)
のapplyメソッドは、をFoo
取り、B=>B
を返しますB=>B
。type-parametersK
とV
「最高」の型を追跡Foo
することは、引数として取ることができます。Foo
さて、次のように関数を拡張したいと思います
class Bar[K, V] extends Function[K=>V, K=>V]() {
def apply(f: K => V) = f
}
val result2: B => B = new Bar[A, A]()(f)
ただし、これは明らかに機能しません。これを機能させる方法はありますか?ありがとう
編集
class Fuzz[K, V, K1 <: K, V1 <: V] extends Function[K1=>V1, K1=>V1] {
def apply(f: K1 => V1) = f
}
val result3: B => B = new Fuzz[A, A, B, B]()(f)
また動作しますが、2つの追加のタイプパラメータを持ちたくない