2017-03-26 1 views
0

저는 case 클래스 State를 가지며이 클래스에서 Variable 클래스를 확장하려고합니다. 하지만 Variable 클래스에서는 생성자에서 값만 필요합니다. run은 어디에 넣을 수 있습니까?유형이 매개 변수를 사용하지 않습니다. Scala

case class State[S, +A](run: S => (A, S)) { 
//.....has `map` function 
    def map[B, X >: State[S, B]](f: A => B): X = 
    State(state => { 
     val (a, s2) = run(state) 
     (f(a), s2) 
    }) 
} 

class Variable[+A](value: A) extends State[A, A] { // ERROR 

    def get: Variable[A] = 
    map(x => x) 
    def set(newValue: A): Variable[A] = 
    map(_ => newValue) 
} 

UPDATE는 나는 이런 식으로 변경했습니다

class Variable[+A](value: A, run: A => (A, A)) extends State[A, A](run) { 
    def get: Variable[A] = 
    map(x => x) // ERROR HERE 
    def set(newValue: A): State[A, A] = 
    map(_ => newValue) 
} 
object Variable { 
    def create[A](value: A): Variable[A] = new Variable[A](value, x => (x, x)) 
} 

하지만 오류가 입수했습니다

형식이 일치; com.libs.State [A, A] required : com.libs.Variable [A] Variable.scala/scala/src/com/libs line 4 스칼라 문제

답변

1

문제는 다음과 같이 정의 할 수 없습니다. 을 사용하는 Variable을 사용합니다. map은 의 수퍼 유형 인 State을 정의합니다. map 만 사용하여 하위 클래스의 추가 정보를 설정하는 방법을 프로그램에서 어떻게 알 수 있습니까? 이 서브 클래스하지만 같은 클래스의 별칭되지 않도록 당신이 type Variable[+A] = State[A, A]를 정의하면 State는 형식 매개 변수 S에서 일정 때문에

그러나, 당신은 약간의 편차 오류가있을 것이다, 그래서 Variable도해야합니다.

관련 문제