मैं परोक्ष स्काला एक्सएमएल Elem वस्तु और एक XML तत्व का एक और प्रतिनिधित्व के बीच परिवर्तित करने के लिए, मेरे मामले में चाहते हैं तत्व dom4j। मैं निम्नलिखित निहित रूपांतरण लिखा है:अंतर्निहित रूपांतरण
implicit def elemToElement(e: Elem): Element = ... do conversion here ...
implicit def elementToElem(e: Element): Elem = ... do conversion here ...
अब तक तो अच्छा, यह काम करता है।
अब मैं भी के संग्रह तत्वों दोनों तरीकों से कन्वर्ट करने के लिए कहा की जरूरत है। सबसे पहले, क्या मुझे अतिरिक्त रूपांतरण विधियों को लिखने की ज़रूरत है? अगर मैंने नहीं किया तो चीजें काम नहीं कर रही थीं।
implicit def elemTToElementT(t: Traversable[Elem]) = t map (elemToElement(_))
implicit def elementTToElemT(t: Traversable[Element]) = t map (elementToElem(_))
इस रूपांतरण विधि एक traversable लेता है, तो यह भी एक traversable रिटर्न क्योंकि बहुत आदर्श नहीं लगती है:
मैं निम्नलिखित लिखने का प्रयास किया। अगर मैं एक सूची पास करता हूं, तो मुझे ट्रैवर्सबल भी मिल जाता है। तो मुझे लगता है कि रूपांतरण किसी भी तरह से parametrized किया जाना चाहिए।
तो आदेश संभव के रूप में सामान्य हो इन रूपांतरणों को लिखने की मानक तरीका क्या है?
'सूची [एक्स]' से 'सूची [वाई]' की तुलना में स्वचालित रूप से 'X' से' Y' में परिवर्तित करने में सक्षम होने के लिए यह और अधिक भ्रमित क्यों है? यह बिल्कुल वैसा ही जरूरत है, अर्थात् आप वास्तव में परवाह नहीं है कि जिसके बारे में प्रतिनिधित्व प्रयोग किया जाता है और आप संकलक आप के लिए busywork हैंडल करना चाहते भरता है। –
यह काफी हद तक शैली और सर्वोत्तम प्रथाओं का विषय है। आग्रह करने के लिए आग्रह करना कि इतना जादू परेशानी के लिए पूछ रहा है। वे मेरे विचार में, स्केल के बीएफजी में से एक हैं: सावधान रहें कि आप इसे किस बिंदु पर इंगित करते हैं। – sblundy
मैं रेक्स के साथ सहमत हूं: मैं इस बात से सहमत नहीं हूं कि यह भ्रमित है। इसके विपरीत, मुझे यह भी उम्मीद थी कि किसी दिए गए प्रकार के निहित रूपांतरण को परिभाषित करने से स्वचालित रूप से उस प्रकार के काम के लिए अंतर्निहित रूपांतरण (क्या मैं "monadic") कंटेनर कहूंगा। – ebruchez