1

ケースクラスをscalaのマップにマップする方法をいくつかのスレッドで読んでいます。残念ながら、提供された回答はどれも十分ではありません。

私の例は、次のようなものです。

case class A(a1: String, a2: String, a3: C)

case class C(c1: String, c2: String, c3: D)

case class D(d1: String, d2: String)

次のインスタンスがあると仮定します

val d = D(d1 ="valueForD1", d2 = "valueForD2")
val c = C(c1 ="valueForc1", c2 = "valueForC2", c3 = d)
val a = A(a1 ="valueForA1", a2 = "valueForA2", a3 = c)

そのケース クラス グラフを次の形式に変換したいと思います。

Map("a1" -> "valueForA1", "a2" -> "valueForA2", 
    "a3" -> Map("c1" -> "valueForC1", "c2" -> "valueForc2", 
    "c3" -> Map("d1" -> "valueForD1", "d2" -> "valueFord2")))
4

1 に答える 1

-1

ただし、これは最も直接的なアプローチであり、あまりスケーラブルではありません...

 def toGraph(a: A): Map[String, Any] = 
   a match {
     case A(a1,a2,C(c1,c2,D(d1,d2))) => Map(
       "a1" -> a1,
       "a2" -> a2,
       "a3" -> Map(
         "c1" -> c1,
         "c2" -> c2,
         "c3" -> Map(
           "d1" -> d1,
           "d2" -> d2)
         )
       )
    case _ => Map() 
  }

より「動的な」アプローチでは、マクロに頼ることができると思います

于 2013-07-15T15:10:32.460 に答える