나는 F-경계 형 Sys
이 호출 된 Foo
:실존 유형 또는 유형 매개 변수 바인딩 실패
def invoke[S <: Sys[S]](foo: Foo[S]) =()
모델 업데이트 유형이 있다고 가정합니다. 이는 DA 서브 타입은 운반 Foo
:
sealed trait Update
case class Opened[S <: Sys[S]](foo: Foo[S]) extends Update
모델 관찰자 등록하기위한 헬퍼 기능 : 지금
def observe(pf: PartialFunction[Update, Unit]) =()
다음이 실패
observe {
case Opened(foo) => invoke(foo)
}
으로 ,
Foo
,
invoke
,
Update
,
Opened
및
observe
가 주어지면 3,516,
어떻게, 부분적인 기능를 해결할 수 있습니다. Foo
에 값 또는 유형 멤버를 추가 할 수 있습니다.
observe {
case Opened(foo) => invoke(foo.asInstanceOf[Foo[~] forSome { type ~ <: Sys[~] }])
}
은 물론이 끔찍한 아니라 선호하는 솔루션이다, 그래서 다른 답변을 기다리고 :
문제는이 즉시 무심되고있다가, 내 모든 API는 타입 생성자 매개 변수를 기반으로합니다. 당신은 곧'def foo [S1 <: Sys [S1]] (바 : Bar {type S = S1}, baz : Baz {type S = S1}) : 가가 {type S = S1}'등을 갖게됩니다. –