无形API的许多重要特性(在Scala中),它们做了什么?

时间:2013-12-31 23:05:24

标签: scala shapeless

我正在努力学习无形(2.0.0)。这似乎是一个了不起的工具,我对此感到非常兴奋,但我在前进中遇到了问题。因为还没有太多的文档,我一直在研究示例和源代码。我遇到了困难,因为大多数例子使用多个无形概念,在源代码中,一个无形类型通常会使用其他类型,所以我最终走下了无形的兔子洞,可以这么说。我认为列出无形API的重要特征以及每个API的功能的简单描述会很有帮助。由于我显然没有资格制作这样的清单,我问你,Stack Overflow的人类!

对于每项功能,请尽可能多地包含以下内容:

  1. 要素的名称以及如何导入。

  2. 对其作用的简短描述。

  3. 为什么这个功能很重要/为什么有人会费心去使用它?

  4. 使用尽可能少的其他无形或高级Scala概念的简单示例。

  5. 通过API的一个特性,我指的是一个单独的东西(例如,类型,函数,对象等),或者一组紧密耦合的东西,由无形2.0定义并且可以导入并在程序中使用。我不是指一般概念,如高阶多态或类型级递归。请每个答案只包含一个功能。也许如果有足够的答案和足够的其他人也使用此列表,我们可以使用答案的投票来排列不同功能的重要性。

    注意:我知道this feature list。我认为它很棒,它对我帮助很大。但是,我正在寻找与API文档更相似的内容,而不是您可以执行的操作列表。我可以理解许多例子,并从中推断出某些特征的目的,但我经常会被某些特定部分绊倒,无法弄清楚它的功能。

1 个答案:

答案 0 :(得分:3)

HList

HList是一种类似列表的数据结构,可以容纳多种类型的对象。 HList实际上是一个特征。给定的HList将具有更具体的类型,完全指定其内容的类型。 HLists是不可改变的。导入HList功能的常用方法是通过

import shapeless._

当您需要不是元组的异构对象的不可变集合时,HLists非常有用。

HLists是使用HNil构造的,它是空的HList和::运算符。以下示例显示如何创建计数为“cat”的HList:

val hl = 1 :: 2 :: "cat" :: HNil

上面hl的类型包括两个Int类型和一个String类型。 Shapeless包含许多有关HLists的有用操作,这些操作应该是其他答案的主题。