以下代码应该返回一个OPERAND派生的案例类,并且IDE说它会这样做,但是在运行时,它返回一个带有Serializable的OPERAND扩展产品,但相邻的代码却没有。我很难过......
什么按预期工作:
class PRAGMADATA
case class PRAGMANULL() extends PRAGMADATA
case class PRAGMADIGITS(var digits : Int) extends PRAGMADATA
case class PRAGMASTRING(var str : String) extends PRAGMADATA
case class PRAGMASECTION(var sect : String, addr : Int) extends PRAGMADATA
case class PRAGMAHEXSTR(s : String) extends PRAGMADATA
case class PRAGMAOBJ(pragmatype : Int, pragmadata : PRAGMADATA)
使用时,我得到一个派生自PragmaObj的对象,scala让我做像
这样的事情obj match {
case obj:PRAGMASTR =>
case obj:PRAGMAHEXSTRING =>
}
这个类结构没有。它给了带有Serializable 的产品,我不能在上面使用大小写匹配。我在这做了什么 - 除了做错了:-)(我自己也做不到......)
class OPERAND
case class REFERENCE(str : String) extends OPERAND
case class REGISTER(regType : Int, value : Int) extends OPERAND
case class LITERAL(ivalue : Int) extends OPERAND
让OPERAND成为一个密封的特性等没有区别......如果有人真的很无聊,这是一个“教学装配课”,所以如果你觉得你需要它,我可以发给你整个解析器文件... < / p>