Shapeless‘HListOps包括许多用于异构HList类型的useful functions。我找不到HMap的等价物。
这是我的目标。我有一个简单的Map[String, String],它在我的应用程序的许多地方用作消息处理管道中的选项存储库。现在,我想通过将其转换为HMap,向此映射添加一个不同的(Key => Value),因此它可能类似于:
class HOptionsMap[K, V]
implicit val intToString = new HOptionsMap[String, String]
implicit val stringToInt = new HOptionsMap[String, Instant]所以我可以进一步使用它,如下所示:
val hm = HMap[HOptionsMap]("placeOfIncident" -> "Toronto", "incidentDate" -> Instant.now)除了我想在上面调用像collect, fold, filter这样的操作,这是不受支持的(与HList不同)。为了不破坏当前的功能,这是一个要求。
当然,我可以在这里使用组合,但我很好奇这是否可以使用Shapeless库来实现。
发布于 2021-10-16 14:25:40
如果HMap对于您的用例来说是一种不方便的抽象,请尝试使用记录
import shapeless.syntax.singleton._
val hm = "placeOfIncident" ->> "Toronto" :: "incidentDate" ->> Instant.now :: HNil您可以将其作为任何HList/记录进行收集、折叠、过滤。
https://github.com/milessabin/shapeless/wiki/Feature-overview:-shapeless-2.0.0#extensible-records
https://stackoverflow.com/questions/69585806
复制相似问题