면책 조항 :이 수 무엇인지의 문제이다, 실제로 권장 될 수없는 것.구조 유형 매개 변수는
의는 다음과 같은 클래스를 제공하고 있다고 가정 해 봅시다 :
case class point1(x: Int, y:Int)
case class point2(x: Int, y:Int)
case class point3(x: Int, y:Int)
을하고 각 클래스
val points1 = List[point1](/*Can be empty for this example*/)
val points2 = List[point2]()
val points3 = List[point3]()
의 어떤 수를 포함하는 목록이 구조 유형의 목록을 만들 수 있습니다 ++
, :::
또는 .union(..)
과 같은 일반적인 기술을 사용하여 모든 클래스가 확장하는 공통적 인 특성을 정의하지 않고 모든 세 가지 유형을 포함 할 수 있습니다 (예 :
var points: List[{def x: Int; def y: Int}] =
points1 ::: points2 ::: points3
위의 설명대로 :::
연산자는 List[Product]
을 반환합니다.
var points: ListBuffer[{def x: Int; def y: Int}] = List[{def x: Int; def y: Int}]()
points1.foreach(e => {
val p: {def x: Int; def y: Int} = e;
points.append(p);
})
points2.foreach(e => {
val p: {def x: Int; def y: Int} = e;
points.append(p);
})
어떤 힌트가 있습니까 나는를 선택 스칼라 컴파일러 도움을 줄 수있다 : 나는 다음과 같은 코드가 올바른 유형의 목록을 생성하지 있기 때문에, 스칼라 컴파일러에 대한 권리 힌트를 제공하는 문제입니다 가정 :::
에 대해 올바른 유형을 지정하고 구조 유형 목록을 생성합니까?
을 그 메소드를 호출 (또는 속성에 액세스의 비용, 구조 유형이 사용될 때 상당히 똑같습니다. –
@RandallSchulz ** 면책 조항 **에 명시된 바와 같이, 이것은 실제로 코드가 사용되는 것이 아니라 스칼라의 구조 유형 시스템 및 추론을 사용하여 가능한 것으로 생각한 실험입니다. 구조적 타이핑, 특히 암시 적 변환을 결합하면 심각한 성능 영향을 미칠 수 있음을 이해합니다. – Syllepsis