higher-order-function 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)
Foo
의 적용 방법은 B=>B
를 취하고 B=>B
를 반환합니다. 유형 매개 변수 K
및 V
은 "가장 높은"유형 인 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)
같은 기능을 확장 할 수 Foo
을하고 싶습니다. 이 일을 할 수있는 방법이 있습니까? A => A
이의 하위 유형이 아니기 때문에 감사
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)
이 또한 작동 편집, 그러나 나는 싶지는 두 개의 추가 형식 매개 변수
다음과 같이 중복 될 수 있습니다. http://stackoverflow.com/q/663254/1019358 – seliopou