首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多态方法中的Scala隐式语法

多态方法中的Scala隐式语法
EN

Stack Overflow用户
提问于 2019-05-22 12:29:39
回答 1查看 194关注 0票数 0

我是一个通过解析库阅读的Scala,并且已经达到了一些我不懂的语法:

代码语言:javascript
复制
def parseA[_: P] = P("a")

val Parsed.Success(value, successIndex) = parse("a", parseA(_))

我想把这些线合并成一条.

代码语言:javascript
复制
val Parsed.Success(value, successIndex) = parse("a", P("a"))

但是这会产生一个编译错误:

代码语言:javascript
复制
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"))

这一行该怎么写?你能说出所涉及的语法概念以最大限度地提高我的学习水平吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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感到舒服(不管这意味着什么)。

至于第二个问题,我认为这是可行的。

代码语言:javascript
复制
def program[_: P] = parse("a", P("a"))
val Parsed.Success(value, successIndex) = program
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56256850

复制
相关文章

相似问题

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