Reader[Token]
現在、 Scala でa を解析しようとしています。Token
したがって、解析ステップ中に a が特定のクラスの要素であるかどうかを確認したいと思います(例: AToken
)。次のコードで簡単に実行できます。
def aToken = acceptIf(_.isInstanceOf[AToken])("Token " + _ + " is not of type AToken")
^^ { _.asInstanceOf[AToken] }
これは完全に正常に機能します。しかし、私はチェックするいくつかのタイプがあります。したがって、すべてのタイプについて、その全体をもう一度上に書く必要があります。だから私はacceptIfInstanceOf[T]
自動的に(魔法のように?) type の抽象メソッドを作成したいと思いT
ます。
私の現在の解決策はまだ2段階のものです:
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(_) }
^
そのようなものを構築することが可能かどうか、またその方法を誰かが知っていますか? ありがとう!