![](/img/trans.png)
[英]In Scala, what should be the type of a map from string to case class, and a map from string to functions taking those case classes as input parameter?
[英]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 class
的case class
獲得Generic
。
您正在嘗試做的事情不會在Scala中進行編譯時驗證。 這里的問題正如您所闡述的那樣,您沒有事先嘗試構建的case class
的定義。 該定義提供了腳手架使用Record
類型來構造同構。
也就是說,我們可能能夠通過調用動態和反射來工作,但我不清楚你如何在代碼中利用它。 您不會事先知道字段名稱,也不會知道它們的類型。 那你怎么用它們編寫代碼呢?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.