스칼라에서 정의 된 일반 트리가 있습니다.Scala에서 기존 데이터 구조 확장
sealed abstract class Tree
object Tree {
case class Node (...) extends Tree
case class Leaf (...) extends Tree
}
이제 트리의 모든 노드와 잎에 멤버 변수를 추가하고 싶습니다. 확장 키워드를 사용할 수 있습니까? 아니면 [T]를 추가하여 트리 클래스를 수정해야합니까?
업데이트 :
내 질문이 오해 된 것 같습니다. 예제는 다음을 지워야합니다.
이 트리 구조가 필요합니다 (실제로는 좀 더 복잡함). 하나의 상황에서 두 개의 Doubles를 필요로합니다. 다른 문맥에서는 하나의 문자열이 필요합니다. 그리고 또 다른 맥락에서 나는 어떤 (추가) 멤버도없는 순수한 나무가 필요합니다. 그리고 첫 번째 변종은 이되고은 세 번째 변형입니다. 의사 코드 :
DTree extends Tree with Touple2[Double, Double]
object DTree {
case class Node (...) extends Tree.Node with Touple2[Double, Double]
case class Leaf (...) extends Tree.Leaf with Touple2[Double, Double]
}
STree extends Tree with String
object DTree {
case class Node (...) extends Tree.Node with String
case class Leaf (...) extends Tree.Leaf with String
}
...
def f (t : Tree) { ... }
나는 f는 모든 나무를 처리 할 수 있어야합니다.
Tree 클래스를 수정했습니다. 나는 그것이 많은 장소에서 사용되는 것처럼 피하고 싶습니다. 그리고 나는 한 곳에서만 풍부한 나무가 필요합니다. –
@ Łukasz Lew : 그런 다음이 구별을 포착하고 해당 레벨의 (추상) 클래스 중 하나에 공유 요소를 넣는 역할을하는 상속 구조에 새 레이어를 도입하십시오. –