此文档页面特定于 Scala 3,并且可能涵盖 Scala 2 中不可用的新概念。除非另有说明,此页面中的所有代码示例均假定你正在使用 Scala 3。
按符号名称搜索函数可能很耗时。这就是新的 scaladoc 允许按类型搜索方法和字段的原因。
考虑以下扩展方法定义
extension [T](arr: IArray[T]) def span(p: T => Boolean): (IArray[T], IArray[T]) = ...
我们可以搜索 IArray[A] => (A => Boolean) => (IArray[A], IArray[A])
,而不是搜索 span
。
要使用此功能,请在 scaladoc 搜索栏中键入你要查找的成员的签名。它的工作方式如下
此功能由 Inkuire 搜索引擎提供,适用于 Scala 3 和 Kotlin。要了解此功能的最新开发情况,请关注 Inkuire 存储库。
查询示例
一些查询示例及其预期结果
List[Int] => (Int => Long) => List[Long]
->map
Seq[A] => (A => B) => Seq[B]
->map
(A, B) => A
->_1
Set[Long] => Long => Boolean
->contains
Int => Long => Int
->const
String => Int => Char
->apply
(Int & Float) => (String | Double)
->toDouble
,toString
F[A] => Int
->length
查询语法
为了使用 Inkuire 而不是默认搜索引擎搜索 scaladoc 搜索栏查询,查询必须包含 =>
字符序列。
接受的输入类似于 Scala 3 中的柯里化函数签名。有一些区别
- AndTypes、OrTypes 和 Functions 必须用括号括起来,例如
(Int & Any) => String
- 可以通过在类型前加上
=>
来查找字段和无参数方法,例如=> Int
- 可以使用通配符
_
来表示我们希望匹配给定位置的任何类型,例如Long => Double => _
- 形式为单个字母的类型,例如
A
或带数字的字母X1
,自动假定为类型变量 - 其他类型变量可以像在多态函数中一样声明,例如
[AVariable, AlsoAVariable] => AVariable => AlsoAVariable => AVariable
使用类型别名和方法接收器
在将代码映射到 InkuireDb 条目时,需要进行一些转换,以使引擎更具主见(尽管可以接受建议和更改)。首先,可以将函数的接收器(非模块所有者)视为第一个参数。还应用了自动柯里化,以便结果不依赖于参数列表。在查找匹配项时,不会区分 val
和 def
。
因此,查询 Num => Int => Int => Int
应该找到以下声明
class Num():
def a(i: Int, j: Int): Int
def b(i: Int)(j: Int): Int
def c(i: Int): (Int => Int)
val d: Int => Int => Int
val e: Int => Int => Int
val f: (Int, Int) => Int
end Num
def g(i: Num, j: Int, k: Int): Int
extension (i: Num) def h(j: Int, k: Int): Int
def i(i: Num, j: Int)(k: Int): Int
extension (i: Num) def j(j: Int)(k: Int): Int
...
对于类型别名,它们在声明和查询签名中都被反糖化。这意味着对于声明
type Name = String
def fromName(name: Name): String
def fromString(str: String): Name
对于查询 Name => Name
、String => String
、Name => String
和 String => Name
,应该找到 fromName
和 fromString
这两种方法。
工作原理
Inkuire 作为浏览器中的 JavaScript 工作器运行,这要归功于 ScalaJS 的强大功能。
要在运行 scaladoc 时启用 Inkuire,请添加标志 -Ygenerate-inkuire
。通过添加此标志,将生成两个文件
inkuire-db.json
- 这是包含当前记录项目中所有可搜索声明的文件,格式为 Inkuire 搜索引擎可读。inkuire-config.json
- 此文件包含应从当前项目的文档中搜索的数据库文件的位置。默认情况下,它将与本地数据库文件的位置以及 外部映射 中数据库文件的默认隐含位置一起生成。