사용자가 여러 프로세서를 함께 연결할 수있는 시스템을 만들려고합니다. 내가 가지고있는 어려움은 각각의 프로세서가 실제로 염려하는 두 비트의 정보를 가지기 때문에 이것들을 유형 안전 방식으로 처리하기를 원합니다. 나는이 문제에 내려 삶은했습니다일반적으로 스칼라로 특성을 인스턴스화합니다.
감안할 때 : 나는 4 개 맛 함께 두 가족의 요소를 결합 할 수 있습니다
//First family of stuff
trait A {
def doA {}
}
trait B {
def doB {}
}
//Second family of stuff
trait X {
def doX {}
}
trait Y {
def doY {}
}
:
var f = new A with X {}
f.doA
d.doX
var g = new A with Y {}
//...
우수함. 문제는 각 함수 (doA 등)가 두 가지 유형의 조합을 반환하여 물건을 함께 연결할 수 있기를 원합니다. 기본적으로 내가하고 싶은 : 특성 { ThingThatImMixedInWithLikeXOrY {}와 데프 doThing = { 않는 새 } } 각 프로세서) (1)의 프로세서 2로 알려진 유형을 구성 익명 클래스를 반환해야
) 그것이 혼합 된 타입.
나의 첫번째 찌르기는 제네릭이 같은 것을 사용하는 것이 었습니다 :
내가 제네릭 클래스를 만들 수 없습니다 : 분명히
trait A { this : {def makeWithT[TOther]} => def doA = makeWithT[B] } trait B { this : {def makeWithT[TOther]} => def doB = makeWithT[A] } trait X { this : {def makeWithS[TOther]} => def doX = makeWithT[Y] } trait Y { this : {def makeWithS[TOther]} => def doY = makeWithT[Y] } class Foo[T, S] extends S with T { def makeWithT[OtherT] = new T with OtherT def makeWithS[OtherT] = new S with OtherT } var f = new Foo[A, X] f.doA.doB f.doX.doA f.doX.doY ...
을, 나는 문제의 카탈로그로 실행했습니다 형식 매개 변수에서 확장됩니다
제네릭 매개 변수를 통해 내 익명 클래스를 인스턴스화 할 수 없습니다
내가 이 뭔가를 섞을 때까지 형식을 알지 못하기 때문에 특성에서 함수의 반환 형식을 정의 할 수 없습니다. 이 스칼라에 관해서
나는 멍청한 놈의 비트 해요, 나는 내가 완전히 잘못된 방법으로 이것에 대해 갈거야 느낌을 얻을 어쩌면 내가 implicits과 CanBuildFrom 패턴을 사용한다. 어떤 도움이라도 대단히 감사하겠습니다.
건배
문제를 최소화하고 매우 추상적으로 만들었습니다. 어떤 경우에는 좋은 일이 될 수 있지만, 구체적인 사례와 구체적인 목표를 설명하고 아카이브하려는 목표가 있다면이 특별한 경우에 도움이 될 것이라고 생각합니다. 내가 알 수있는 한,이 질문에서 우리는 아직 알지 못하는 문제에 대한 (깨진) 해결책을 설명하고 있습니다.당신이 우리와 공유한다면, 현재 직면하고있는 문제에 대한 또 다른/더 나은/일하는 해결책을 찾을 수있을 것입니다. – tenshi
OK, 여기갑니다. 나는 문법을 가지고있어서 dataSource.map (...)과 같은 일을 할 수있다. filter (...) 여기서 dataSource는 내 자신의 종류의 스트림이다. 문제는 내가 수행하고 싶은 다른 연산이 변환이 아니라 오히려 계산이 수행되는 방법을 수정 한 것입니다. 예를 들어 datasource.asParallel.filter (...). asSequential을 원할 수 있습니다. 약간 인위적인 예이지만 두 가지 작업 그룹이 있음을 알 수 있습니다. asParallel의 반환 유형은 asSequential 연산을 노출하는 무언가 여야합니다. –