आईडी के साथ प्राकृतिक परिवर्तन एचएमएपी का उपयोग करना

मैं कक्षा [ए] से ए में एक हैप बनाना चाहता हूं, लेकिन मुझे ऐसा करने का कोई तरीका नहीं मिल रहा है जो बदसूरत नहीं दिखता है। मैंने कोशिश की:

val defaultValues = HMap[(Class ~?> Id)#λ](
    classOf[String] -> "",
    classOf[Int] -> 0)

लेकिन मुझे एक संकलन त्रुटि मिलती है क्योंकि कक्षा [स्ट्रिंग], स्ट्रिंग के लिए कोई अंतर्निहित नहीं है। मैं इसे आईडी का उपयोग करके तर्कों को स्पष्ट रूप से टाइप करके संकलित कर सकता हूं:

val defaultValues = HMap[(Class ~?> Id)#λ](
    classOf[String] -> ("": Id[String]),
    classOf[Int] -> (0: Id[Int]))

हालांकि यह बहुत आकर्षक नहीं है - क्या मैं इसे ": आईडी [ए]" की आवश्यकता के बिना कर सकता हूं?

1
एचएमएपी क्या है?
जोड़ा लेखक Stefan Kunze, स्रोत
एक हैप आकारहीन पुस्तकालय से एक वर्ग है ( github.com/milessabin/shapeless )
जोड़ा लेखक aebrett, स्रोत

1 उत्तर

हैप यह साबित करने के लिए अंतर्निहित साक्ष्य का उपयोग करता है कि आपको मानचित्र में कुंजी/मूल्य जोड़ी डालने की अनुमति है। आपको उस बाधा को एन्कोड करना होगा जो आप चाहते हैं कि जब आप हैप बना रहे हों या इसमें मूल्य डाल रहे हों या इससे मूल्य प्राप्त कर रहे हों।

import shapeless.HMap

class HMapExample {

    class InstanceOfConstraint[K, V]

    implicit def instanceOfClass[T] = new InstanceOfConstraint[Class[T], T]

    val defaultValues = HMap[InstanceOfConstraint](
      classOf[String] -> "Hello",
      classOf[Int] -> 23
    )
}

आपको जो चाहिए वह करना चाहिए।

0
जोड़ा