0

私はScalaにまったく慣れていないので、これに関する明確な情報を見つけることができません。

私はこのオブジェクトを持っています:

object pc { 
  val stack = new Stack[Lattice]
  def top(): Lattice = stack.top
  def pop() = stack.pop
  def push(lev: Lattice) =
    if (stack.isEmpty) stack push lev
    else stack.push(lev(pc.top))            
}

しかし、を使用してポップしようとするとpc.pop()、型の不一致が発生し、型は見つかりましたが、プログラム内の別のクラスから型を返す必要がありますLattice。呼び出しの例:

case If(e, t1, t2) ⇒ {
  val v = eval(e)
  if ( v.T ) {
    pc.push(v.myLevel.⊔(pc.top()))  
    eval( t1 )
    pc.pop()
  } else {
    pc.push(v.myLevel.⊔(pc.top()))
    eval(t2)
    pc.pop()
  }
}

これが私がポップを使おうとしたときの正確なエラーです

interpreter.scala:127: error: type mismatch;
 found   : ScalaObject
 required: cs162.miniJS.values.Storable
    pc.pop()
4

1 に答える 1

1

イミュータブルはテールを返しますStack。それを修正する必要があります。または、可変のものを使用します。popdef pop() = if (stack.nonEmpty) { val top = stack.top; stack.pop; Some(val) } else None

于 2013-01-31T00:08:47.210 に答える