와 요소 컬렉션 내가 (정규식 표기법)의 라인을 따라하는 방법 반환 뭔가 시행 할 수있는 방법이 있나요 :유형 검사 다른 특성
(T with A) (T with A with B)+ (T with B)
내가 Traversable[T]
를 반환하는 경우는, 그것은 바운드 특성을 삭제 . 마찬가지로 첫 번째 요소와 마지막 요소에 대해 정확하지 않으므로 Traversable[T with A with B]
을 반환 할 수 없습니다.
이 문제를 해결하는 방법을 모르겠습니다. 내 프로그램에 암시 적 조건을 소개하고, .asInstanceOf[]
캐스트를 사용하여 형식 시스템을 남용하고있는 것처럼 느껴집니다. 어쩌면 내가 잘못된 종류의 데이터 구조를 사용하고 있을까요?
다음은 내가 작성한 코드의 예입니다. route
메소드를 적용하려고합니다. User
클래스는 T
유형을 확장합니다. 코드가 많기 때문에 코드를 생략했습니다.
trait Producer extends User {
def send(file: Data)
}
trait Consumer extends User {
def receive(file: Data)
}
...
def route(sender: T with Producer, receiver: T with Consumer): Traversable[T]
def transfer(sender: T with Producer, receiver: T with Consumer, file: Data) {
val path = route(sender, receiver)
if (!path.isEmpty) {
sender send file
val nextHop = route(sender, receiver).tail.head
nextHop.asInstanceOf[T with Consumer] receive file
if (nextHop != receiver) {
transfer(nextHop.asInstanceOf[T with Producer], receiver, file)
}
}
}
흠 ... 그 나쁜 생각이 아니다 :
다음은 예입니다. 내가 하나의 콜렉션에서 그들을 하나로 모으려고 한 이유는'route() '를 호출 할 때마다 더 투명하게되기를 원했기 때문입니다. 지금 생각해 보면 필요할 경우 튜플을 'Traversable [T]'로 평평하게 만들 수 있다고 생각합니다. –