以下scala解析器定义不返回OPERAND类型,它返回带有Seri​​alizable的OPERAND extneds Product。为什么?

时间:2018-06-04 17:50:35

标签: scala parsing

以下代码应该返回一个OPERAND派生的案例类,并且IDE说它会这样做,但是在运行时,它返回一个带有Seri​​alizable的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 =>
}

这个类结构没有。它给了带有Seri​​alizable 的产品,我不能在上面使用大小写匹配。我在这做了什么 - 除了做错了:-)(我自己也做不到......)

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>

0 个答案:

没有答案