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)

fタイプの関数を指定Bar => Fooすると、それをに適用することはできませんBazFoo => Bar(一方、タイプの関数は完全に問題ありません。)

于 2012-07-13T16:30:25.403 に答える