1
我想有更高阶功能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
可以作为参数。现在,我想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)
同样的作品,但我不想携带两个附加的类型参数
这可能是以下副本:http://stackoverflow.com/q/663254/1019358 – seliopou