単純なパーサー コンビネーターを試してみると、コンパイル エラーが発生します。
「スミス、ジョー」を Name(Joe、Smith) のような名前オブジェクトに解析したいと思います。十分に単純だと思います。
これに関連するコードは次のとおりです。
import util.parsing.combinator._
class NameParser extends JavaTokenParsers {
lazy val name: Parser[Name] =
lastName <~ "," ~> firstName ^^ {case (l ~ f) => Name(f, l)}
lazy val lastName = stringLiteral
lazy val firstName = stringLiteral
}
case class Name(firstName:String, lastName: String)
そして、私はそれを介してテストしています
object NameParserTest {
def main(args: Array[String]) {
val parser = new NameParser()
println(parser.parseAll(parser.name, "Schmo, Joe"))
}
}
コンパイル エラーの取得:
error: constructor cannot be instantiated to expected type;
found : NameParser.this.~[a,b]
required: java.lang.String
lazy val name: Parser[Name] = lastName <~ "," ~> firstName ^^ {case (l ~ f) => Name(f, l)}
ここで私が見逃しているのは何ですか?