Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无形状API(在Scala中)的重要特性是什么,它们是做什么的?_Scala_Shapeless - Fatal编程技术网

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

无形状API(在Scala中)的重要特性是什么,它们是做什么的?,scala,shapeless,Scala,Shapeless,我正在努力学习shapeless(2.0.0)。这似乎是一个了不起的工具,我对此感到非常兴奋,但我在前进中遇到了问题。因为还没有太多的文档,我一直在仔细研究示例和源代码。我遇到了一些困难,因为大多数示例使用了多个不成形的概念,并且在源代码中,一个不成形的类型经常会使用其他类型,所以我最终陷入了不成形的兔子洞。我认为列出无形状API的重要特性以及每个特性的简单描述会有所帮助。由于我显然没有资格列出这样的清单,我在问你,堆栈溢出的人类 对于每个功能,请尽可能包括以下内容: 功能的名称以及如何导入 对

我正在努力学习shapeless(2.0.0)。这似乎是一个了不起的工具,我对此感到非常兴奋,但我在前进中遇到了问题。因为还没有太多的文档,我一直在仔细研究示例和源代码。我遇到了一些困难,因为大多数示例使用了多个不成形的概念,并且在源代码中,一个不成形的类型经常会使用其他类型,所以我最终陷入了不成形的兔子洞。我认为列出无形状API的重要特性以及每个特性的简单描述会有所帮助。由于我显然没有资格列出这样的清单,我在问你,堆栈溢出的人类

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

  • 功能的名称以及如何导入

  • 对其功能的简短、简单的描述

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

  • 这是一个使用尽可能少的其他不成形或高级Scala概念的简单示例

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

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

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

    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