Scala 给出一个HList如何获得HMap

Scala 给出一个HList如何获得HMap,scala,shapeless,hlist,Scala,Shapeless,Hlist,我有一个符号列表。我想将其转换为HMap,其中HList值作为键,并且值映射设置为基于键生成的对象。生成的对象保持状态,因此虽然可以知道默认映射,但后续状态不是。没有进一步的信息,并且基于对HList的非常肤浅的了解(我唯一的感觉是Tuple2的列表),我想您可以通过迭代来做到这一点。可能的伪代码是: // Presume tuple._1 is the key val hmap = hlist.map{ tuple => (tuple._1, doSomething(tuple._1))

我有一个
符号列表
。我想将其转换为
HMap
,其中
HList
值作为
,并且
映射设置为基于
生成的对象。生成的对象保持状态,因此虽然可以知道默认映射,但后续状态不是。

没有进一步的信息,并且基于对HList的非常肤浅的了解(我唯一的感觉是
Tuple2的列表),我想您可以通过迭代来做到这一点。可能的伪代码是:

// Presume tuple._1 is the key
val hmap = hlist.map{ tuple => (tuple._1, doSomething(tuple._1))}.toMap

嗯。。。问题是,不成形的
HMap
并不像
HList
那样直截了当,但以下内容可以帮助您开始

import shapeless._
import poly._

val hList = 'omg1 :: 'omg2 :: 'omg3 :: HNil

// lets assume that you want to map Symbols to kv-pairs String -> Int
// hence your HMap will have kv-pairs "omg1" -> 1, "omg2" -> 2...

class BiMapIS[K, V]
implicit val stringToInt = new BiMapIS[String, Int]

object myFoldPolyFunc extends Poly {
  implicit def caseSymbol = use(
    (hmap: HMap[BiMapIS], elem: Symbol) =>
      hmap + (elem.name -> elem.name.last.toString.toInt)
  )
}

val hMap = hList.foldLeft(HMap.empty[BiMapIS])(myFoldPolyFunc)

val v1 = hMap.get("omg1")
// Some(1)

val v2 = hMap.get("omg2")
// Some(2)

不幸的是。。。你的回答毫无帮助。@SarveshKumarSingh考虑到问题本身的模糊性和缺乏细节,以及我对HList和HMap的肤浅了解,我并不感到惊讶。但是,除了指出我的回答是多么无益之外,你能提供更多关于哪一部分是无益的信息吗?这样其他人可能会给出更明智的答案。嗯。。。无形状的HMAP和HList与Scala的列表和地图有很大不同。在这个特殊的情况下,你的答案更像是给一个C++问题的Python答案,它根本不支持OP。我认为你应该删除这个答案。