Scala 如果特征A[+;T]扩展了B,我应该能够在需要B的地方传递类型A[T]的类吗?
以下是我所处的确切情况(我不想将其简化,以免遗漏错误的原因): 在我工作的框架中,有一个Scala 如果特征A[+;T]扩展了B,我应该能够在需要B的地方传递类型A[T]的类吗?,scala,Scala,以下是我所处的确切情况(我不想将其简化,以免遗漏错误的原因): 在我工作的框架中,有一个 trait RequestHeader{...} 还有另一个特点 trait Request[+A] extends RequestHeader{...} 有一个函数希望接收以下类型的参数: def f(arg: RequestHeader => Result) = {...} 我希望能通过考试 arg': Request[AnyContent] => Result 但是,这会导致编译器
trait RequestHeader{...}
还有另一个特点
trait Request[+A] extends RequestHeader{...}
有一个函数希望接收以下类型的参数:
def f(arg: RequestHeader => Result) = {...}
我希望能通过考试
arg': Request[AnyContent] => Result
但是,这会导致编译器抱怨。这是为什么?的输入类型是相反的,如果你仔细想想,这是有道理的。考虑下面的更简单的例子:
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
的函数就可以了。)请求[\u]与此有什么关系?您定义了标题[+A]
,但没有显示它的任何用法。键入错误,没有标题[+A]。现在编辑,谢谢。