给定HList你如何获得HMap

时间:2017-02-02 10:55:31

标签: scala shapeless hlist

我有delete HList。我想将此转换为Symbols,其中HMap值为HListkeys映射设置为基于value的生成对象。生成的对象保持状态,因此虽然默认映射可以知道后续状态不是。

2 个答案:

答案 0 :(得分:2)

嗯......事实上,无形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) 那样直截了当,但以下内容可以让你开始

echo date("F tS, Y",time());

答案 1 :(得分:-3)

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

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