使用本参考

对于大多数通用库,Hana中的算法通过它们所属的概念(FoldableIterableSearchableSequence等等)来记录。 不同的容器然后被记录在他们自己的页面上,并且他们建模的概念被记录在那里。 由某个容器建模的概念定义了可以与这样的容器一起使用的算法。

更具体地,参考的结构(在左边的菜单中可用)如下:

  • 核心
    核心模块的文档,其中包含创建概念,数据类型和相关实用程序所需的一切。这是相关的,如果你需要扩展库,否则你可以忽略这一点。
  • 概念
    与库一起提供的所有概念的文档。每个概念:
    • 必须绝对实施函数的文档,以便对该概念建模。必须提供的函数集称为最小完整定义。
    • 该概念的任何模型必须满足的文档语义约束。这些约束通常称为定律,它们以半正式数学语言表示。当然,这些法律不能自动检查,但你应该确保你满意他们。
    • 记录其精炼的概念(如果有的话)。有时,一个概念是足够强大的,以提供一个概念的模型,它精炼,或至少一些相关的功能的实现。在这种情况下,该概念将记录其提供的精化概念的哪些功能,以及如何实现。此外,有时可能的是,用于精化概念的模型是唯一的,在这种情况下,其可以被自动提供。当这种情况发生时,它将被记录,但你不必做任何特殊的,以获得该模型。
  • 数据类型
    与库一起提供的所有数据结构的文档。每个数据结构都记录了它模型的概念,以及它是如何实现的。它还记录了绑定到它的方法,但不是任何概念,例如也许是可选的。
  • 功能
    通常在纯功能设置中有用的通用函数对象。这些目前没有绑定到任何概念或容器。
  • 外部适配器
    外部库的所有适配器的文档。这些适配器被记录为Hana提供的本机类型,但显然Hana只提供它们和库之间的兼容层。
  • 配置选项
    可用于调整库的全局行为的宏。
  • 断言
    宏执行各种类型的断言。
  • 按字母顺序排列
    库中提供的所有内容的字母索引。
  • 标题
    库提供的所有标题的列表。
  • 细节
    实施细节;不要去那里。任何未记录或记录在此组中的内容不能保证是稳定的。

在你知道Hana更好一点之后,它可能会发生,你只是想找到一个精确的函数,概念或容器的参考。如果您知道要查找的内容的名称,可以使用文档任何页面右上角的搜索框。我个人的经验是,这是迄今为止,当你已经知道它的名字,找到你想要的最快的方式。

函数签名

正如你将在参考中看到的,几个函数提供以半正式数学语言记录的签名。 我们正在以这种方式记录所有功能,但这可能需要一段时间。 使用的符号是用于定义函数的通常的数学符号。 具体地,函数Return f(Arg1,...,ArgN); 可以使用数学符号as等价地定义:

函数签名

然而,这些签名不是记录实际的参数和返回类型的函数,而是根据参数和返回标签来写。 这是因为异构设置,其中对象的实际类型通常是毫无意义的,并且不帮助推断什么是由函数返回或采取。 例如,不是将integral_constants的等函数记录为

函数签名

这是没有真正有用的(因为它真的不提供任何东西,但实现),而是记录使用integr_constant_tag,它充当所有的integral_constants的“类型”。 注意,因为equalComparable概念的一部分,所以实际上没有为hana::integral_constant记录,但是想法是:

函数签名

这清楚地表达了比较两个整数常数给出另一个整数常数持有一个布尔的意图。 一般来说,对象的实际表示的这种抽象使我们能够以高级方式推理函数,即使它们的实际返回和参数类型是异质的并且没有帮助也是可能的。 最后,大多数函数期望容器元素具有一些属性。 例如,这是排序算法的情况,这显然需要容器元素是可订购的。 通常,我们将为sort的非预测版本写入签名

函数签名

然而,这并不表示S的内容是可订购的要求。 为了表达这一点,我们使用以下符号:

函数签名

看到这一点的一种方法是假装S,序列标签,实际上是由序列的元素T的标签参数化。我们还假装这些元素都有相同的标签T,这不是一般的情况 。 现在,通过说明T必须是Orderable,我们表达的事实,序列的元素必须是Orderable。 这种符号用于不同的口味来表达不同种类的需求。 例如,cartesian_product算法采用一系列序列,并将那些序列的笛卡尔积作为序列序列返回。 使用我们的标记,这可以很容易地传达:

函数签名