繁体   English   中英

类型不带参数Scala

[英]type does not take parameters Scala

我有案例类State,并且想要从中扩展Variable类; 但是在Variable类中,只需要在构造函数中使用值即可。 我可以在哪里放置run功能?

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)
}

更新我已经变成了这样的东西:

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]必需:com.libs.Variable [A] Variable.scala / scala / src / com / libs第4行Scala问题

问题是您不能使用map定义Variable ,因为map定义了一个State ,它只是Variable的超类型。 您的程序如何仅使用map知道如何设置子类的其他信息?

但是,如果您定义type Variable[+A] = State[A, A] ,因此它不是子类而是同一类的别名,则由于State在其类型参数S是不变的,因此会出现一些方差错误。 ,因此Variable必须如此。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM