在我使用Scala Parser Combinator(JavaTokenParser
)包含特征后,完美运行的Scala程序被破坏了
trait QueryFragmentsParser extends JavaTokenParsers {
.......
}
object QueryTranslator extends QueryFragmentsParser {
.....
.....
val rootNodeID = (xml \ "@nodeid").toString()
}
Eclipse中的错误消息:
value \不是QueryTranslator.Elem QueryTranslator.scala
的成员
有人可以帮我解决这个问题吗?
我使用了以下scala xml库。
import scala.xml.XML
import scala.xml.Node
import scala.xml.Text
import scala.xml.Elem
import scala.xml.Attribute
import scala.xml.Null
import scala.xml.transform._
import scala.xml.pull._
import scala.annotation.tailrec
import scala.xml.UnprefixedAttribute.
答案 0 :(得分:2)
Parsers
特征定义了一个名为Elem
的类型。您的object QueryTranslator
继承自Parser
,因此它也有QueryTranslator.Elem
类型。由于您还继承了RegexParser
和JavaTokenParsers
,因此QueryTranslator.Elem
是Char
的别名,因为这些特征定义了该类型。显然xml
的类型为QueryTranslator.Elem
。因此,当xml \ ...
出现错误时,xml
为Char
并且\
没有Char
运算符。
因此问题是xml
类型为QueryTranslator.Elem
时,您希望它属于scala.xml.Elem
类型。大概就是这种情况,因为你在xml : Elem
内的某处写了QueryTranslator
。由于Elem
始终会引用QueryTranslator.Elem
内的QueryTranslator
,因此您必须使用别名导入scala.xml.Elem
或使用其(可能部分)合格来引用import scala.xml.{Elem => XElem}
// ...
def foo(xml: XElem) = ...
名称。因此,两个可行的解决方案是:
import scala.xml
// ...
def foo(doc: xml.Elem) = ...
或
operator*