Closed. This question needs to be more focused。它当前不接受答案。
想改善这个问题吗?更新问题,使其仅关注editing this post的一个问题。
4年前关闭。
Improve this question
有人可以简单地向我解释Shapeless库的用途吗?
Scala具有泛型和继承功能,因此我对Shapeless的用途感到有些困惑。
也许用例来说明问题会有所帮助。 从某处读取一堆值到 对该 使用多态函数在该 将第三个元素(静态称为 使用HList的值 构造一个案例类
作为引用,
如果采用这样的HList的
Shapeless还带有
我倾向于使用的其他功能是:
想改善这个问题吗?更新问题,使其仅关注editing this post的一个问题。
4年前关闭。
Improve this question
有人可以简单地向我解释Shapeless库的用途吗?
Scala具有泛型和继承功能,因此我对Shapeless的用途感到有些困惑。
也许用例来说明问题会有所帮助。
最佳答案
很难解释,因为无形状具有多种功能。我可能会发现“以简单的方式解释什么是变量”更为容易。您绝对想从feature overview开始。
广义地说,无形是关于使用类型进行编程。在编译时执行通常在运行时完成的事情,精确跟踪列表中每个元素的类型,能够将元组转换为HList到case类,创建多态函数(与方法相对),等等
典型的使用场景如下:
List
List
执行类型安全的转换,将其转换为HList
HList
上进行映射,例如标准化值Int
)转换为填充0的字符串作为引用,
HList
将具有精确的类型,例如Int :: String :: Boolean :: HNil
(是的,实际上是单个类型),其中所有内容均固定,大小固定。因此,您要么需要在编译时确切地知道将要进入HList的内容,要么需要类型安全的强制转换。如果采用这样的HList的
tail
,则会得到String :: Boolean :: HNil
,并且在编译时保证其开头将是String
。在值前面加上一个值将类似地保留所有涉及的类型。Shapeless还带有
Generic
类型类,它允许您在元组和案例类上使用HList操作。我倾向于使用的其他功能是:
Coproducts
,它允许您静态键入一个值,例如“一个String
,Double
或Int
,但别无其他”(很像Either
,但不仅限于两种可能性)Lenses
,简化了嵌套案例类的工作。 关于scala - 有人可以向我解释Shapeless库的用途吗? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21739190/
10-12 00:42