无形状API(在Scala中)的重要特性是什么,它们是做什么的?
我正在努力学习shapeless(2.0.0)。这似乎是一个了不起的工具,我对此感到非常兴奋,但我在前进中遇到了问题。因为还没有太多的文档,我一直在仔细研究示例和源代码。我遇到了一些困难,因为大多数示例使用了多个不成形的概念,并且在源代码中,一个不成形的类型经常会使用其他类型,所以我最终陷入了不成形的兔子洞。我认为列出无形状API的重要特性以及每个特性的简单描述会有所帮助。由于我显然没有资格列出这样的清单,我在问你,堆栈溢出的人类 对于每个功能,请尽可能包括以下内容:无形状API(在Scala中)的重要特性是什么,它们是做什么的?,scala,shapeless,Scala,Shapeless,我正在努力学习shapeless(2.0.0)。这似乎是一个了不起的工具,我对此感到非常兴奋,但我在前进中遇到了问题。因为还没有太多的文档,我一直在仔细研究示例和源代码。我遇到了一些困难,因为大多数示例使用了多个不成形的概念,并且在源代码中,一个不成形的类型经常会使用其他类型,所以我最终陷入了不成形的兔子洞。我认为列出无形状API的重要特性以及每个特性的简单描述会有所帮助。由于我显然没有资格列出这样的清单,我在问你,堆栈溢出的人类 对于每个功能,请尽可能包括以下内容: 功能的名称以及如何导入 对
import shapeless._
当您需要非元组的异构对象的不可变集合时,HLists非常有用
HList是使用HNil构造的,HNil是空的HList和::运算符。以下示例显示如何创建计数为“cat”的HList:
上面的
hl
类型包括两种Int类型和一种String类型。Shapeless包含了许多关于HLists的有用操作,这些操作应该是其他答案的主题。根本不是答案,但我有一篇博文,它解决了一个简单的问题,给出了一个值级解决方案,然后介绍了如何使用异构列表和类型级自然数将其转换为类型级解决方案。它是1.2.4,不过也许有一天我会尝试更新它。但是元组可以有异构类型。那么一定还有别的原因吗?这是一个很好的观点,我并不完全清楚它的优势是什么。但是,请查看这个问题,了解为什么要使用HList而不是tuple:
val hl = 1 :: 2 :: "cat" :: HNil