它只能来自import sbt._或来自DefaultProject。由于sbt不是包对象,它必须来自DefaultProject.
这是因为隐式必须定义或导入到作用域中,并且您只能从对象(object对象或类的实例)中导入它们。例外是在源或目标(当已知时)类型的伴随对象上隐含定义的,这两者都不适用,因为您已经检查过。
不过,这有点没有实际意义。创建新的Scaladoc的原因正是为了处理这些问题。
以 Scala 解析器为例:
import scala.util.parsing.combinator.JavaTokenParsers
object T extends JavaTokenParsers {
def myparser = "\\w+".r ~ "\\d+".r
}
该方法~未定义在 上Regex,因此我们搜索它。在此处查看最新的 scaladoc以尝试以下说明。
最简单的方法:点击#左上角的 ,获取以符号开头的方法列表。向下滚动到~,然后查看:BigInt OnceParser Parser Parsers。从这里开始,使用试验、错误和直觉。
有条不紊的方法:JavaTokenParsers在搜索框上输入快速找到班级,然后选择它。在方法列表中,找到implicit从Regex到其他东西的方法。只有一个,需要Parser. 点击Parser验证。
您可能想要单击 进行implicit def regex转换的方法,以查看它的定义位置:RegexParsers。显示该方法定义的文档,JavaTokenParsers即使它没有在该类中定义或覆盖。
这一点特别重要,因为如果您在 上查看SBT API 文档DefaultProject,您会发现它本身没有定义任何方法,并且仅在其 40 个(如果我算对的话)祖先特征和类。可能需要一段时间,直到您单击ManagedProject才能发现它具有从String两者的隐式转换GroupID和RepositoryName,前者定义%和%%,而后者定义at。