2012-07-13 73 views
2

這裏是確切的情況,我在(我不想簡化它,生怕錯過了錯誤的原因):如果特質A [+ T]擴展B,我應該能夠傳遞需要B的類型A [T]的類嗎?

在我在那裏工作的框架是一個

trait RequestHeader{...} 

和另一性狀

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

有是期望接收類型的參數的函數:

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

我希望能在

arg': Request[AnyContent] => Result 

但是通過,這使編譯器抱怨。爲什麼是這樣?

+0

'請求[_]'與此有關嗎?你定義了'Header [+ A]',但沒有顯示它的任何用法。 – 2012-07-13 16:21:24

+0

錯誤輸入,沒有標題[+ A]。現在編輯,謝謝。 – 2012-07-13 16:27:09

回答

8

Function1在其輸入類型中是相反的,如果您仔細考慮它是有意義的。考慮下面的簡單的例子:

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

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

如果我給fBar => Foo類型的函數,它不會是能夠適用於Baz。 (另一方面,Foo => Bar類型的函數將完全正常。)

相關問題