2017-02-02 12 views
2

HListSymbolsです。私はHMapkeysとしてHListの値とkeyに基づいて生成されたオブジェクトにvalueのマッピングを設定して変換したいと思います。生成されたオブジェクトは状態を保持するため、デフォルトのマッピングは後続の状態が分からない場合があります。HListを指定すると、HMapを取得する方法

答えて

2

うーん...事は型崩れ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) 
-3

さらに詳しい情報はなく、HListについての非常に浅い知識に基づいています(私の唯一の認識はList of Tuple2です)、私はあなたが繰り返し行うことができると思います。可能な擬似コードは次のようになります。

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

を始めることができるということです答えは役に立たないでしょう。 –

+0

@SarveshKumarSingh私は、曖昧さと質問そのものの詳細の欠如と、HListとHMapの非常に表面的な知識を考えると、驚くことはありません。しかし、私の答えがどれほど役に立たなかったかを指摘するのではなく、どの部分が役に立たないのかについてより多くの情報を与えることができますか?他の人がもっと知的な答えを与えることができるように。 –

+0

よく...シェイプレスHMapsとHListは、Scalaのリストとマップとはまったく異なります。この特定のケースでは、あなたの答えは、OPをまったく犠牲にしないC++の質問に対してPythonの答えを与えるようなものです。そして、私の意見では、この答えを削除する必要があります。 –

関連する問題