그는 다음 컴파일 입력 경로 의존의 형태 지정 :스칼라 : 영사에게
import scala.collection.mutable.MutableList
abstract class GeomBase[T <: DTypes]
{
val grids = new MutableList[GridBase]
def hexs: MutableList[GridBase#HexG with T#HexTr] = grids.flatMap(_.hexs.toList)
//the above compiles fine
abstract class GridBase
{
val hexs: MutableList[HexG with T#HexTr] = new MutableList[HexG with T#HexTr]
class HexG(coodI: Cood) extends Hex
{
}
}
}
그러나이 나는이이
def hexs: MutableList[GridBase#HexG with T#HexTr] = grids.flatMap (_.hexs.toList)
에서 선 (목록에 MutableList 변경)을 변경하면
def hexs: List[GridBase#HexG with T#HexTr] = grids.flatMap (_.hexs.toList)
더 이상 컴파일되지 않습니다. 이것은 내가 전자의 경우에 MutableList이 필요하고, 후자의 호환성을 입력 말, 하나
def hexs: MutableList[GridBase#HexG with T#HexTr] = grids(0).hexs
그것은 늘 컴파일 컴파일되지 않습니다. 나는 왜 그런지 이해하지 못한다. 혼란을 야기하는 경우에 대비하여 HexG는 자체적으로 GeomBase의 내부 클래스 인 GridBase의 내부 클래스입니다.
업데이트 : Travis Brown의 대답은 첫 번째 오류에 대한 올바른 설명을 제공하는 것으로 보입니다. MutableList의 모든 사용을 List로 변경했습니다. 놀랍게도 이것은 첫 번째 오류뿐만 아니라 두 번째 오류도 막을 수있었습니다. 가장 바깥 쪽의 GeomBase 클래스 외부에서 유형을 사용하려고 할 때도 오류가 발생합니다. 나는 컴파일러 충돌이있다. 유형을 인스턴스화 할 때. MutableLists에서 목록으로 변경하면 예기치 않게 이러한 오류 중 하나가 제거되지만 컴파일러 충돌은 제거되지 않습니다. 나는 2.10.0-M3 용 스칼라 Eclipse 플러그인 2.1 스페셜 에디션을 사용 해왔다. 이것은 스칼라 컴파일러와 경로 의존형에 여전히 문제가있을 수 있다는 결론에 이릅니다.
격자 (0) .hexs는 반드시 grid (0) .HexG이고 T # hexTr 유형이며 투영 된 유형의 인스턴스는 아닙니다. 관련 코드가 숨겨져 있지 않습니다. 그리드를 실제로 인스턴스화하기 전에 일치시킬 유형을 얻으려고 할 때 실제로 그리드가 비어 있습니다. 그리드 (grid)를 사용하는 것이 전체 컬렉션을 사용하는 것과 어떻게 다른지 나는 알 수 없다. –
'grids (0)'은 T # HexTr을 가진'GridBase # HexG '가 될 것이지만, 무엇이든의'MutableList '는 아닙니다. –
그리드 (0)는 반드시 GridBase의 인스턴스가 될 것입니까? –