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/