2

这是我所处的确切情况(我不想简化它,以免错过错误原因):

在我工作的框架中有一个

trait RequestHeader{...}

和另一个特点

trait Request[+A] extends RequestHeader{...}

有一个函数期望接收一个类型的参数:

def f(arg: RequestHeader => Result) = {...}

我希望能够通过

arg': Request[AnyContent] => Result

但是,这会导致编译器抱怨。为什么是这样?

4

1 回答 1

8

Function1它的输入类型是逆变的,如果您考虑一下,这是有道理的。考虑以下更简单的示例:

trait Foo
case object Bar extends Foo
case object Baz extends Foo

def f(g: Foo => Foo): Foo = g(Baz)

如果我给出ftype 的函数Bar => Foo,它将无法将其应用于Baz. Foo => Bar(另一方面,type 的函数会非常好。)

于 2012-07-13T16:30:25.403 回答