scala - 变换/遍历 Shapeless 的 HMap

标签 scala generics shapeless

Shapeless 的 HListOps 包括许多 useful functions对于它们的异构 HList 类型。我找不到 HMap 的等效项。

这是我的目标。我有一个简单的 Map[String, String] ,它在我的应用程序的很多地方用作消息处理管道中的选项存储库。我现在想通过将其转换为 HMap 来向此 map 添加不同的 (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 库实现。

最佳答案

如果 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

关于scala - 变换/遍历 Shapeless 的 HMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69585806/

相关文章:

Scala 无形 : derive type from Mapper

scala - 使用无形状类型不等式时如何自定义 Scala 模糊隐式错误

scala - 如何为 Scala 应用程序提供基本配置?

Java API 无法识别方法

eclipse - Hadoop 二进制文件中的 java.io.IOException : Could not locate executable null\bin\winutils. exe。 Windows 7 上的 Spark Eclipse

Java泛型方法通过使用类型开关获取类型值

Swift 2.0 协议(protocol)扩展——typealias

scala - 链接包含选项的 scala Try 实例

java - 转换为编译时未知的泛型类型

scala - 排序HList