2012-07-13 2 views
2
여기

내가 (필자는 오류의 원인을 놓치게의 두려움을 단순화하고 싶지 않아요)에서 오전 정확한 상황 : 내가 거기 있어요 프레임 워크에서특성 A [+ T]가 B를 확장하면 B가 필요한 A [T] 유형의 클래스를 전달할 수 있어야합니까?

trait RequestHeader{...} 
입니다

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

또 다른 특성은

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

유형의 인수를받을 것으로 예상하는 기능이있다

내가 그러나

arg': Request[AnyContent] => Result 

에 통과 할 수 있기를 기대 것,이 컴파일러가 불평됩니다. 왜 이런거야?

+0

어떻게 [Request [_]'와 관련이 있습니까? 당신은'Header [+ A]'를 정의했지만 그것을 사용하지는 않았다. –

+0

잘못되었으므로 헤더 [+ A]가 없습니다. 고마워, 고마워. –

답변

8

Function1은 입력 유형이 반대이므로 사용자가 생각하면 의미가 있습니다. I 유형 Bar => Foo의 기능, 그 Baz에 적용 할 수 없을거야 f을주는 경우에

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

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

: 다음과 같은 간단한 예를 생각해 보자. (Foo => Bar 타입의 함수는 완벽하게 괜찮을 것입니다.)

관련 문제