2014-07-23 2 views
0

각 쌍이 (StringField -> Value) 인 Map[String, Any]에서 개체를 만들 수 있습니까? 예를 들어매개 변수의 매핑이있는 개체 구성 scala

,

case class Example(a: String, b: Int) 
val obj = new Example(Map('a' -> 'blah', 'b' -> 1)) //? 
val orMaybe = Example(Map('a' -> 'blah', 'b' -> 1) //? 

답변

1

네, 여러 가지 방법으로 가능합니다. 그 중 하나는 반사를 사용하는 것이고, 다른 하나는 간단한 것을 중간재로 사용하는 것입니다.

예. json4s와 : 그와

(Example.apply _).tupled("a" -> 1)

을하고 Tuple으로 그 myMap.map 패스에게지도의 각 요소를 알고 : 당신은 함수의 매개 변수 목록으로 튜플을 통과 할 수

import org.json4s._ 
import org.json4s.native.Serialization 
import org.json4s.native.Serialization.{read, write} 

scala> implicit val formats = DefaultFormats 
formats: org.json4s.DefaultFormats.type = [email protected] 

case class Example(a: String, b: Int) 
scala> val obj = read[Example](write(Map("a" -> "blah", "b" -> 1))) 
obj: Example = Example(blah,1) 
scala: val orMaybe = read[Example](write(Map("a" -> "blah", "b" -> 1))) 
orMaybe: Example = Example(blah,1) 
+0

매우 c ool. 고맙습니다! – joslinm

2

.tupled를 사용하여 다음을 수행 할 수 있습니다.

Map("a" -> 1).map((Example.apply _).tupled).head

관련 문제