在阅读Solving Problems in a Generic Way using Shapeless结论的第一句后:
在本文中,我演示了如何在不依赖昂贵的运行时功能(如反射)的情况下为ADT创建通用解决方案
这是否意味着Shapeless的副产品不使用运行时反射或转换,与Scala中的ADTs相反?
答案 0 :(得分:3)
我是博文的作者。我认为存在一个误解:我并不是故意暗示ADT依赖于运行时反射。我所指的是引言中的这句话:
传统上,通用程序是在反射API的帮助下编写的。
据我所知,ADT不使用运行时反射,但没有无形状,以通用方式遍历ADT没有太多选择。实现此目的的一种方法是使用looking up object fields at runtime的反射并迭代字段。您还可以编写遍历ADT的代码和每个ADT节点上的模式匹配,但该解决方案仅适用于您的ADT而不适用于所有其他ADT,即解决方案不是通用的。