다른 유형의 다른 멤버 (컨텍스트에서 "추가 된"의미)에 추가 할 수있는 값에 대해 작동하는 함수를 작성하고 싶습니다. 이러한 유형의 명백한 (ㅎ - ㅎ) 정의 :자기 참조 형 타이핑
type Addable = { def +(a : Addable) : Addable }
나에게 나는 전혀 이해하지 못하는 오류를 제공합니다 : 재귀 방법 + 요구 사항이 발생할 유형
왜 마지막 : Addable
아니다 결과 유형? 어쨌든 +가 재귀라고 생각하는 이유는 무엇입니까?
하지만 자신의 정의 내부 형식을 참조하기 위해 노력하고,보다 일반적인 문제를 발견
type T = { def f: T }
을하지만 그때 나는 뇌파를했다 : 그것을 나는 자바에서와 방법을 해결!
type T[T] = { def f: T }
이 컴파일됩니다!
하지만 이제는 두 가지 문제가 더 있습니다.
첫째,
def n(a:T) = a.f
는 동안 오류가 전적으로 합리적인 아직 실망 "T는 매개 변수를 입력합니다 유형"을 부여하는 방법을 특히 T 형식을 사용하는 아무 생각이 없습니다. 원래 문제
type Addable[Addable] = { def +(a : Addable) : Addable }
이 패턴을 적용하려고 시도하는 두 번째
는 "그 정제 외부에서 정의하는 추상 형식을 참조하지 않을 수 있습니다 구조적 정제의 매개 변수 유형"완전히 이해할 리드. (- 하나님과 마틴 감사합니다, 그건 내 머리를 엉망을 완료 할 것이기 때문이다 - 실제 문제는 "+"의 것이 아니다. 그것은 매개 변수로 한 Addable 소요 단지) 그래서
- "같은 유형의 값을 반환하는 특정 함수가 있습니까?"라는 오리 유형을 어떻게 정의합니까?
- 오리 유형 정의 "매개 변수와 같은 유형의 표현식을 사용하는 특정 기능이 있습니까?"라는 의미는 어떻게 정의합니까?
나는이 문제를 해결할 수 있다는 종교적 신념을 가지고 있습니다.
참조 http://stackoverflow.com/questions/3466100/are-recursive-structural-types-not-supported-in-scala-anymore 및 http://stackoverflow.com/questions/3201577/scala-how-to-define-a-structural-type-that-itself-itself- –