Closed. This question needs to be more focused。它当前不接受答案。












想改善这个问题吗?更新问题,使其仅关注editing this post的一个问题。

4年前关闭。



Improve this question




有人可以简单地向我解释Shapeless库的用途吗?

Scala具有泛型和继承功能,因此我对Shapeless的用途感到有些困惑。

也许用例来说明问题会有所帮助。

最佳答案

很难解释,因为无形状具有多种功能。我可能会发现“以简单的方式解释什么是变量”更为容易。您绝对想从feature overview开始。

广义地说,无形是关于使用类型进行编程。在编译时执行通常在运行时完成的事情,精确跟踪列表中每个元素的类型,能够将元组转换为HList到case类,创建多态函数(与方法相对),等等

典型的使用场景如下:

  • 从某处读取一堆值到List
  • 对该List执行类型安全的转换,将其转换为HList
  • 使用多态函数在该HList上进行映射,例如标准化值
  • 将第三个元素(静态称为Int)转换为填充0的字符串
  • 使用HList的值
  • 构造一个案例类

    作为引用, HList 将具有精确的类型,例如Int :: String :: Boolean :: HNil(是的,实际上是单个类型),其中所有内容均固定,大小固定。因此,您要么需要在编译时确切地知道将要进入HList的内容,要么需要类型安全的强制转换。

    如果采用这样的HList的tail,则会得到String :: Boolean :: HNil,并且在编译时保证其开头将是String。在值前面加上一个值将类似地保留所有涉及的类型。

    Shapeless还带有 Generic 类型类,它允许您在元组和案例类上使用HList操作。

    我倾向于使用的其他功能是:
  • Coproducts ,它允许您静态键入一个值,例如“一个StringDoubleInt,但别无其他”(很像Either,但不仅限于两种可能性)
  • Lenses ,简化了嵌套案例类的工作。
  • 关于scala - 有人可以向我解释Shapeless库的用途吗? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21739190/

    10-12 00:42