【发布时间】:2020-09-28 23:42:20
【问题描述】:
我正在实现 scala 解释器,但我遇到了一些问题。
首先,我想实现tuple 类
在我的Value.scala 中,存在跟班:
case class TupleV(values: List[Type]) extends Value
另外,在我的Expr.scala 中,存在跟班
case class TupleE(expressions: List[Type] extends Expr
Type 也在Expr.scala 中,如下所示:
sealed trait Type
case object IntT extends Type
case object BooleanT extends Type
case object TupleT extends Type
case object ListT extends Type
case object FunctionT extends Type
所以,我实现如下:
case TupleE(values)=>TupleV(values)
但它说 List[Expr] found,List[Value] 是必需的。我的代码有什么问题?我应该怎么解决?
我还尝试使用 ConsE 和 ConsV 类以不同的方式实现,这使我能够将列表分为头部和尾部:
case class ConsE(head: Expr, tail: Expr) extends Expr//in Expr.scala
case class ConsV(head: Value, tail: Value) extends Value//in Value.scala
case ConsE(head, tail)=>ConsV(interp(head), interp(tail)//my implementation for ConsV interpreter&works well now
我试过了
case TupleE(expression)=>expression match{
case ConsE(head, tail)=>ConsV(head, tail)
}
但它返回:ConsE 的“构造函数无法实例化为预期类型”错误。我该如何解决?
【问题讨论】:
-
什么是
Type? How to create a Minimal, Reproducible Example不应该是TupleV(values: List[Value]) extends Value和TupleE(values: List[Expr]) extends Expr吗? -
请提供显示错误的真实代码,而不是带有语法错误的sn-ps。至少您需要显示包含
case语句的match。 -
不确定这是否仍然相关,但我在您的deleted 问题
sealed trait Typecase object IntT extends Type中找到了Type的定义... -
这个问题的类型相同。正如有人告诉我只关注一个问题,我改变了问题的格式。我还编辑了我的问题。
标签: scala interpreter type-mismatch