17

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

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

  1. 功能的名称以及如何导入它。

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

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

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

API 的一个特性是指单个事物(例如,类型、函数、对象等),或紧密耦合的此类事物的小集合,由 shapeless 2.0 定义并且可以导入并用于一个程序。我指的不是一般概念,例如高阶多态性或类型级递归。每个答案请仅包含一项功能。也许如果有足够多的答案并且足够多的其他人也使用这个列表,我们可以使用对答案的投票来对不同特征的重要性进行排名。

注意:我知道这个功能列表。我认为它很棒,它对我帮助很大。但是,我正在寻找更类似于 API 文档的东西,而不是你可以做的事情的列表。我可以理解许多示例并从中推断出某些功能的用途,但是我经常会被某些特定的部分绊倒而无法弄清楚它的功能。

4

1 回答 1

3

列表

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

import shapeless._

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

HList 是使用 HNil(空 HList)和 :: 运算符构造的。下面的例子展示了如何创建一个算作“cat”的 HList:

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

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

于 2014-01-02T01:39:39.083 回答