मैं इस तरह की स्कैला सूची बनाना चाहता हूं:
List(("Att1", getAtt1(), Int),
("Att2", getAtt2(), BigDecimal),
("Att3", getAtt3(), Long))
GetAtt1, getAtt2 और getAtt3 स्काला में आयात किए गए जावा ऑब्जेक्ट से आते हैं। मैं रूपांतरण जानने के लिए सूची के तीसरे पैरामीटर का उपयोग करता हूं। उदाहरण के लिए, getAtt3() एक इंट देता है और मेरी सूची मुझे बताती है कि मुझे इसे लंबे समय तक बदलने की जरूरत है।
मैं स्कैला 2.11.8 का उपयोग करता हूं।
क्या आपको कोई जानकारी है?
1 उत्तर
आप वास्तव में, जैसा कि टिप्पणियों में उल्लेख किया गया है, इस समस्या को हल करने के लिए कक्षा का उपयोग कर सकते हैं। मैं 2 प्रकार के पैरामीटर और रूपांतरण विधि वाली कक्षा के लिए जाऊंगा। कुछ इस तरह:
> case class Attribute[Original, Target](name: String, value: () => Original)(converter: Original => Target) {
def convert = converter(value())
}
defined class Attribute
> Attribute("three", () => 3)(_.toLong).convert
res11: Long = 3L
कृपया ध्यान दें कि मैंने केस क्लास के converter
पैरामीटर को उसके अपने पैरामीटर ब्लॉक में अलग कर दिया है। स्काला में टाइप अनुमान के साथ मदद करने के लिए यह एक आम चाल है। अब आप रूपांतरण को Int
से Long
में केवल _.toLong
के रूप में परिभाषित कर सकते हैं। यदि आप converter
को उसी पैरामीटर ब्लॉक में डालते हैं, तो आपको उदाहरण निर्माण के दौरान पूर्ण प्रकार के हस्ताक्षर निर्दिष्ट करने होंगे: Attribute("", () => 3, (i: Int) => i.toLong)
।
case class Conv(name: String, get: () => Int, convert: Int => Long)