2014-12-11 4 views
14

निम्नलिखित उदाहरण पर विचार से निकालें लेबल मानों केस वर्ग क्षेत्रों के।एक LabelledGeneric उदाहरण

क्या मैं के लिए देख रहा हूँ

"bar" :: "baz" :: HNil 

अर्थात की तर्ज जानकारी एक मूल्य में सिंगलटन प्रकार में निहित materializing साथ कुछ करने के लिए labl से जाने के लिए एक तरीका है।

क्या यह संभव है? मैं एक मैक्रो का उपयोग कर सकता था, लेकिन मुझे लगता है कि मैं GenericMacros ऑब्जेक्ट के समान आकार में कुछ लिखना समाप्त कर दूंगा, इसलिए मैं सोच रहा हूं कि मैं इसे सीधे लाभ उठा सकता हूं या नहीं।

उत्तर

16

आप shapeless.ops.record.Keys के माध्यम से रिकॉर्ड की कुंजी (Symbol एस) प्राप्त कर सकते हैं।

यह

import shapeless._ 
import shapeless.ops.record._ 

case class Foo(bar: String, baz: Boolean) 
val labl = LabelledGeneric[Foo] 
val keys = Keys[labl.Repr].apply 
println(keys) 
println(keys.toList.map(_.name)) 

परिणामों में

'bar :: 'baz :: HNil 
List(bar, baz) : List(String) 
+4

महान है, धन्यवाद! एक मामूली नोट: पहले प्रिंटलॉन की तरह दिखने के बावजूद, 'कुंजी' प्रकार प्रतीकों या तारों का 'एचएलआईटी' नहीं है, लेकिन इसमें टैग की जानकारी भी शामिल है। मुझे शुद्ध तारों की 'एचआईएलआईटी' की आवश्यकता थी, इसलिए मुझे 'ऑब्जेक्ट टूनेम पॉली 1 { निहित डीफ कुंजी टोनानाम [ए] = पर [ए के साथ प्रतीक' के साथ 'एचआईएलआईटी' पर 'पॉली 1' के साथ मैप करना पड़ा। ] (_। नाम) } ' –

संबंधित मुद्दे