कहते हैं कि मैं इस वर्गस्कैला में, ऑब्जेक्ट के मानों को मानचित्र [स्ट्रिंग, स्ट्रिंग] में कैसे चालू करें?
case class Test (id: Long, name: String)
और इस वर्ग का एक उदाहरण है दो:
Test :
id -> 1
name -> toto
मैं एक मानचित्र [स्ट्रिंग, स्ट्रिंग] इस प्रकार बनाना चाहेंगे:
Map("id" -> "1", "name" -> "toto")
मेरा सवाल है: क्या टेस्ट के इस उदाहरण को मैप [स्ट्रिंग, स्ट्रिंग] में बदलने का कोई तरीका है? मैं इस एक के रूप में एक विधि का उपयोग करने से बचना चाहते हैं:
def createMap(instance: Test): Map[String, String] = {
val map = new Map[String, String]
map.put("id", instance.id.toString)
map.put("name", instance.name)
map
}
अगर वहाँ स्काला में ऐसा करने की कोई विधि नहीं है, वहाँ वर्ग गुण से अधिक पुनरावृति करने के लिए एक तरीका है? शायद मैं ऐसा करने के लिए एक सामान्य कार्य बना सकता हूं:
def createMap(instance: T): Map[String, String] = {
val map = new Map[String, String]
//pseudocode
for ((name, value) <- instance.getClassProperties.getValues) {
case value.isInstanceOf[String] : map.push(name, value)
case _ : map.push(name, value.toString)
}
map
}
क्या यह संभव है? यदि आपके पास अच्छे उदाहरण/लिंक हैं, तो मुझे रूचि है।
[इस प्रश्न] के जवाब [http://stackoverflow.com/questions/2224251/reflection-on-a-scala-case-class) मदद कर सकते हैं। – incrop
ऐसा नहीं है कि मुझे सामान्य समाधान पसंद नहीं हैं, लेकिन इस समस्या के लिए मैं 'मानचित्र ("आईडी" -> t.id.toString, "name" -> t.name) का उपयोग करूंगा, जहां 't' का उदाहरण है 'Test'। – sschaef
टिप के लिए धन्यवाद! – alexgindre