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

但是当我尝试使用 pop 时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()
  }
}

这是我尝试使用 pop 时的确切错误

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

1 回答 1

1

不可变Stackpop返回尾巴。def pop() = if (stack.nonEmpty) { val top = stack.top; stack.pop; Some(val) } else None应该修复它。或者使用可变的。

于 2013-01-31T00:08:47.210 回答