【问题标题】:Transform/traverse Shapeless' HMap变换/遍历 Shapeless 的 HMap
【发布时间】:2021-10-15 13:51:15
【问题描述】:

Shapeless' HListOps 包括许多 useful functions 的异构 HList 类型。我找不到 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 库实现。

【问题讨论】:

    标签: scala generics shapeless


    【解决方案1】:

    如果HMap 对您的用例来说是不方便的抽象,请尝试使用记录

    import shapeless.syntax.singleton._
    
    val hm = "placeOfIncident" ->> "Toronto" :: "incidentDate" ->> Instant.now :: HNil
    

    您可以像任何 HList/record 一样收集、折叠、过滤它。

    https://github.com/milessabin/shapeless/wiki/Feature-overview:-shapeless-2.0.0#extensible-records

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-11
      • 2021-02-13
      • 1970-01-01
      • 1970-01-01
      • 2011-01-13
      • 2012-07-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多