gpt4 book ai didi

xml - 无法选择正确的组合器进行解析并在 Scala 中处理它

转载 作者:数据小太阳 更新时间:2023-10-29 02:12:20 24 4
gpt4 key购买 nike

我有这段代码涉及 scala 的 Parsers 类:

trait SomeTrait extends SomeTrait2 {
def myParse = {
phrase(rep(
ElemName(Some("http://someUri/"), "someNode1") ~ //compiles well, but fails sometimes at runtime
ElemName(Some("http://someUri/"), "someNode2") ^^
{
case p1 ~ p2 ⇒ //......
}) ^^
{
case p1 ⇒ // ....
})
}
}

在哪里

case class ElemName(namespace: Option[String], name: String) {
// .....
}

通常情况下,“someNode1”和“someNode2”都存在于输入的soap字符串中(此处未指定,但无所谓)。然而,有时它们中的任何一个都可能存在或者甚至都不存在,在这种情况下它会在运行时崩溃。

<items>
<subItems>
<someNode1 val1="123" val2="456" />
<someNode1 val1="123a" val2="456c" />
<someNode1 val1="123b" val2="456d" />
<someNode2 val1="123" val2="456" />
</subItems>
<subItems>
<someNode2 val1="123cd" val2="456de" />
</subItems>
<subItems>
</subItems>
<subItems>
<someNode1 val1="777" val2="888" />
</subItems>
<items>

我必须处理这个问题。所以我做了:

trait SomeTrait extends SomeTrait2 {
def myParse = {
phrase(rep(
ElemName(Some("http://someUri/"), "someNode1") | // should work
ElemName(Some("http://someUri/"), "someNode2") ^^
{
case p1 ~ p2 ⇒ //......
}) ^^
{
case p1 ⇒ // ....
})

//or, I'm not sure which one to choose
//ElemName(Some("http://someUri/"), "someNode1") ||| // should work also
//ElemName(Some("http://someUri/"), "someNode2") ^^
}
}

据我所知,这应该有效。但是,此时它不再编译,因为它说:

constructor cannot be instantiated to expected type;
[error] found : SomeTrait.this.~[a,b]
[error] required: ElemName
[error] case p1 ~ p2 ⇒ {
[error] ^
[error] one error found

我相信我必须用其他东西替换 case p1 ~ p2。

最佳答案

问题是|和|||两者都返回一个标记。具体来说:

一个 | b 尝试解析a,成功则返回,失败则尝试解析b一个||| b 尝试解析 a 和 b 并使用解析最多字符的结果。我不认为他们中的任何一个是你想要的。如果是,您应该只使用 p1 而不是 p1 ~ p2。我认为您真正想要的是:

phrase(rep(
ElemName(Some("http://someUri/"), "someNode1").? ~
ElemName(Some("http://someUri/"), "someNode2").? ^^
{
case Some(p1) ~ Some(p2) ⇒ //......
case Some(p1) ~ None => //.....
case None ~ Some(p2) => //.....
})

关于xml - 无法选择正确的组合器进行解析并在 Scala 中处理它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19379917/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com