这是我所处的确切情况(我不想简化它,因为害怕错过错误的原因):
在我正在工作的框架中有一个
trait RequestHeader{...}
Run Code Online (Sandbox Code Playgroud)
和另一个特点
trait Request[+A] extends RequestHeader{...}
Run Code Online (Sandbox Code Playgroud)
有一个函数需要接收类型的参数:
def f(arg: RequestHeader => Result) = {...}
Run Code Online (Sandbox Code Playgroud)
我希望能够传入
arg': Request[AnyContent] => Result
Run Code Online (Sandbox Code Playgroud)
但是,这会导致编译器抱怨.为什么是这样?
Function1它的输入类型是逆变的,如果你考虑它就有意义.请考虑以下更简单的示例:
trait Foo
case object Bar extends Foo
case object Baz extends Foo
def f(g: Foo => Foo): Foo = g(Baz)
Run Code Online (Sandbox Code Playgroud)
如果我给出f一个类型的函数Bar => Foo,它将无法应用它Baz.(Foo => Bar另一方面,类型的功能完全没问题.)