我是一个通过解析库阅读的Scala,并且已经达到了一些我不懂的语法:
def parseA[_: P] = P("a")
val Parsed.Success(value, successIndex) = parse("a", parseA(_))我想把这些线合并成一条.
val Parsed.Success(value, successIndex) = parse("a", P("a"))但是这会产生一个编译错误:
Error:(8, 61) overloaded method value P with alternatives:
[T](t: fastparse.P[T])(implicit name: sourcecode.Name, implicit ctx: fastparse.P[_])fastparse.P[T] <and>
=> fastparse.ParsingRun.type
cannot be applied to (String)
Error occurred in an application involving default arguments.
val Parsed.Success(value, successIndex) = parse(source, P("a"))这一行该怎么写?你能说出所涉及的语法概念以最大限度地提高我的学习水平吗?
发布于 2019-05-22 15:19:41
_: P与(implicit ctx: P[_])相同,这意味着该方法请求一个P[_]类型的隐式参数(下划线表示它不关心内部类型。见https://stackoverflow.com/questions/8000903/what-are-all-the-uses-of-an-underscore-in-scala)。
P("a")正在调用这方法,它需要这样的隐式作用域,这就是为什么在第二个示例中它无法编译,因为它没有找到隐式参数。
这里被起诉的特征是隐含的、存在的类型和宏.
所有这些都是非常先进的技术。如果你刚刚开始,我建议把它们留给后者。
导入是非常重要和有用的,我将从这里开始,但首先要确保您对“正常”Scala感到舒服(不管这意味着什么)。
至于第二个问题,我认为这是可行的。
def program[_: P] = parse("a", P("a"))
val Parsed.Success(value, successIndex) = programhttps://stackoverflow.com/questions/56256850
复制相似问题