首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自fastparse.P[Any] => fastparse.P[Unit]的隐式视图不可用

来自fastparse.P[Any] => fastparse.P[Unit]的隐式视图不可用
EN

Stack Overflow用户
提问于 2020-08-05 17:24:13
回答 2查看 189关注 0票数 0

我正在通过快速解析教程/解释工作,并得到错误消息

代码语言:javascript
复制
error: No implicit view available from fastparse.P[Any] => fastparse.P[Unit]

对于序列示例。

我使用的是SBT1.3.8和Scala2.13.1。快速解析的定义版本为2.2.2。

代码语言:javascript
复制
scala> import fastparse._
import fastparse._

scala> def ab[_:P] = P("a" ~ "b")
                           ^
       error: No implicit view available from fastparse.P[Any] => fastparse.P[Unit].

scala> def a[_:P] = P("a")
a: [_](implicit evidence$1: fastparse.P[Any])fastparse.package.P[Unit]

scala> def b[_:P] = P("b")
b: [_](implicit evidence$1: fastparse.P[Any])fastparse.package.P[Unit]

scala> def ab[_:P] = P(a ~ b)
                         ^
       error: No implicit view available from fastparse.package.P[Any] => fastparse.package.P[Unit].

scala> def ab[_:P] = P("a" | "b")
ab: [_](implicit evidence$1: fastparse.P[Any])fastparse.package.P[Unit]

scala> fastparse.parse("a", ab(_))
res2: fastparse.Parsed[Unit] = Parsed.Success((), 1)

这个错误意味着什么?我做错了什么/如何在没有错误的情况下结束本教程步骤?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-08-05 17:55:31

您需要指定如何处理白空间,例如,下列操作失败

代码语言:javascript
复制
import fastparse._
import fastparse.NoWhitespace._

def ab[_:P] = P("a" ~ "b")
assert(parse("a      b", ab(_)).isSuccess)

因为"a b"包含空格,而下面的传递

代码语言:javascript
复制
import fastparse._
import fastparse.SingleLineWhitespace._

def ab[_:P] = P("a" ~ "b")
assert(parse("a      b", ab(_)).isSuccess)

因为import fastparse.SingleLineWhitespace._提供空白用户。如果我们看一下~的定义

代码语言:javascript
复制
def ~[V, R](other:  P[V])
           (implicit s: Implicits.Sequencer[T, V, R],
            whitespace: P[Any] => P[Unit],
            ctx: P[_]): P[R] = macro MacroImpls.parsedSequence[T, V, R]

我们看到了implicit whitespace: P[Any] => P[Unit]需求,它解释了No implicit view available错误。例如,空格导入提供了此功能。

代码语言:javascript
复制
object NoWhitespace {
  implicit object noWhitespaceImplicit extends (ParsingRun[_] => ParsingRun[Unit]){
    def apply(ctx: ParsingRun[_]) = ctx.freshSuccessUnit()
  }
}

在这里我们看到ParsingRun[_] => ParsingRun[Unit]隐函数。

票数 4
EN

Stack Overflow用户

发布于 2020-08-05 17:33:36

你又错过了一个重要的

代码语言:javascript
复制
import NoWhitespace._

https://scastie.scala-lang.org/qCKZEnRHS7eOhjpVjtWNIQ

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63270429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档