这是我所处的确切情况(我不想简化它,以免错过错误原因):
在我工作的框架中有一个
trait RequestHeader{...}
还有一个特点
trait Request[+A] extends RequestHeader{...}
有一个函数期望接收以下类型的参数:
def f(arg: RequestHeader => Result) = {...}
我希望能够传入
arg': Request[AnyContent] => Result
但是,这会导致编译器报错。这是为什么?
最佳答案
Function1
在其输入类型上是逆变的,如果您考虑一下,这是有道理的。考虑以下更简单的示例:
trait Foo
case object Bar extends Foo
case object Baz extends Foo
def f(g: Foo => Foo): Foo = g(Baz)
如果我给 f
一个类型为 Bar => Foo
的函数,它就不能将它应用到 Baz
。 (另一方面,Foo => Bar
类型的函数就可以了。)
关于scala - 如果特征 A[+T] 扩展 B,我是否应该能够在需要 B 的地方传递 A[T] 类型的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11474337/