簡體   English   中英

從Map [String,Type]生成案例類?

[英]Generate Case Class from Map[String, Type]?

給定一個函數f ,給定一個Map[String, MyType] ,返回一個HList

package net

import shapeless._

sealed trait MyType
case object MyInt extends MyType
case object MyStr extends MyType

object Mapper {

    def f(m: Map[String, MyType]): HList = m.foldLeft[HList](HNil){ (acc, elem) =>
        val (key, t) = elem
        t match {
            case MyInt => classOf[Int] :: acc
            case MyStr => classOf[String] :: acc
        } 
    }
}

我測試了它:

import net._
val list = Map("foo" -> MyInt, "bar" -> MyStr)

scala> Mapper.f(list)
res0: shapeless.HList = class java.lang.String :: int :: HNil

我如何使用上面的方法(或另一個)來構建一個case class ,其成員匹配String鍵,以及f的輸出給出的類型?

所以,我正在尋找:

g(Map("foo" -> MyInt, "bar" -> MyStr))輸出case class X(foo: Int, bar: String) ,其中X是任意選擇的,即此時不重要。

我想過使用Generic[X] ,但我不知道如何在沒有case classcase class獲得Generic

您正在嘗試做的事情不會在Scala中進行編譯時驗證。 這里的問題正如您所闡述的那樣,您沒有事先嘗試構建的case class的定義。 該定義提供了腳手架使用Record類型來構造同構。

也就是說,我們可能能夠通過調用動態和反射來工作,但我不清楚你如何在代碼中利用它。 您不會事先知道字段名稱,也不會知道它們的類型。 那你怎么用它們編寫代碼呢?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM