У меня появилось выше нечетное сообщение об ошибке, которое я не понимаю. Значение Parsers не является членом пакета scala.util.parsing.combinator.что не так: "значение Parsers не входит в пакет scala.util.parsing.combinator"?
Я пытаюсь изучить комбинаторы Parser, написав C-парсер шаг за шагом. Я начал с токена, поэтому у меня есть классы:
import util.parsing.combinator.JavaTokenParsers
object CeeParser extends JavaTokenParsers {
def token: Parser[CeeExpr] = ident ^^ (x => Token(x))
}
abstract class CeeExpr
case class Token(name: String) extends CeeExpr
Это так просто, как я мог это сделать.
ниже код работает отлично, но если я раскомментировать комментируемую строку я получаю сообщение об ошибке, приведенном выше:
object Play {
def main(args: Array[String]) {
//val parser: _root_.scala.util.parsing.combinator.Parsers.Parser[CeeExpr] CeeParser.token
val x = CeeParser.token
print(x)
}
}
В случае это проблема с моей установкой, я использую 2.7.6 Scala через scala-плагин для intellij. Может ли кто-нибудь пролить свет на это? Сообщение неверно, Parsers
является членом scala.util.parsing.combinator
.
--- Последующий
Этот человек http://www.scala-lang.org/node/5475, кажется, есть та же проблема, но я не понимаю, ответ он был дан. Может ли кто-нибудь объяснить это?
Также можно обратиться к вложенному классу с помощью синтаксиса 'scala.util.parsing.combinator.Parsers # Parser [CeeExpr]'. Вложенные типы в scala * зависят от пути * (что означает, что вложенный тип отличается для каждого * экземпляра * внешнего типа). Синтаксис '#' оборачивается этим. –
Это не имеет никакого отношения к его признанию. Это даст ту же проблему, если бы это был класс. –
@ Даниэль это правда? Я должен попробовать. Я думал, что если Parser был классом, то, несомненно, CeeParser.Parser будет экземпляром Parsers.Parser, поэтому импорт будет работать. –