目前,我正在尝试Reader[Token]
在 Scala 中解析 a 。因此,我想在解析步骤中检查 aToken
是否是特定类的元素(例如AToken
)。我可以使用以下代码轻松做到这一点:
def aToken = acceptIf(_.isInstanceOf[AToken])("Token " + _ + " is not of type AToken")
^^ { _.asInstanceOf[AToken] }
这工作得很好。但我有几种类型要检查。所以对于每一种类型,我都需要在上面再写一遍。所以我想要一些acceptIfInstanceOf[T]
自动(神奇地?)为 type 创建一个抽象方法T
。
我目前的解决方案仍然是两步:
def acceptIfInstanceOf[T](implicit m: Manifest[T]) : Parser[Elem] =
acceptIf(_.getClass == m.runtimeClass)("" + _ + " is not of type " + m)
def aToken = acceptIfInstanceOf[AToken] ^^ { _.asInstanceOf[AToken] }
这也有效,但我想摆脱函数应用程序aToken
并将其直接包含在acceptIfInstanceOf
. 可悲的是,这不起作用:
def acceptIfInstanceOf[T](implicit m: Manifest[T]) : Parser[T] =
acceptIf(_.getClass == m.runtimeClass)("" + _ + " is not of type " + m)
^^ { m.runtimeClass.cast(_) }
我从 Scala 编译器收到以下错误消息:
scala: type mismatch;
found : _$1 where type _$1
required: T
def acceptIfInstanceOf[T](implicit m: Manifest[T]): Parser[T] =
acceptIf(_.getClass == m.runtimeClass)("" + _ + " is not of type " + m)
^^ { m.runtimeClass.cast(_) }
^
有人知道是否以及如何构建这样的东西吗?谢谢!