gpt4 book ai didi

scala - 阅读 Scala DSL 代码的最佳方法是什么?

转载 作者:行者123 更新时间:2023-12-01 23:08:57 24 4
gpt4 key购买 nike

在 Squeryl getting started page有一个 Scala 代码示例:

import sbt._

class Project(info: ProjectInfo) extends DefaultProject(info) {

val squeryl = "org.squeryl" % "squeryl_2.8.1" % "0.9.4-RC3"
}

我很困惑,因为 % 不是 RichString 或 String 类中定义的方法。我最好的猜测是它在别处定义并称为隐式转换。

在 Scala 中阅读和理解此类代码的最佳方法是什么?

最佳答案

它只能来自 import sbt._DefaultProject。由于 sbt 不是包对象,它必须来自 DefaultProject

这是因为implicits 必须被定义或导入到作用域中,并且你只能从对象(object 对象或类的实例)中导入它们。异常(exception)是在源或目标(当已知时)类型的伴随对象上隐式定义的,因为您已经检查过,它们都不适用。

不过,这有点没有实际意义。之所以创建新的Scaladoc,正是为了处理这些问题。

以 Scala 解析器为例:

import scala.util.parsing.combinator.JavaTokenParsers
object T extends JavaTokenParsers {
def myparser = "\\w+".r ~ "\\d+".r
}

~方法在Regex上没有定义,所以我们搜索一下。查看最新的 scaladoc here试试下面的解释。

最简单的方法:点击左上角的#,得到一个以符号开头的方法列表。向下滚动到 ~,并查看:BigInt OnceParser Parser Parsers。从现在开始,使用试验、错误和直觉。

有条不紊的方式:在搜索框输入JavaTokenParsers快速找到类,然后选择它。在方法列表中,找到从 Regex 到其他东西的 implicit。只有一个需要Parser。点击Parser进行验证。

您可能希望单击执行转换的方法 implicit def regex 以查看它的定义位置:RegexParsersJavaTokenParsers 的文档显示了该方法的定义,即使它没有在该类中定义或覆盖。

这是特别重要的,因为如果您检查 SBT API DocumentationDefaultProject 上,您会偶然发现它本身没有定义任何方法,并且仅在其 40 个(如果我算对的话)祖先上提供方法的 name特征和类别。单击 ManagedProject 可能需要一段时间才能发现它具有从 StringGroupIDRepositoryName 的隐式转换>,前者定义%%%,而后者定义at

关于scala - 阅读 Scala DSL 代码的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4747864/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com