मैं इस तरह की स्कैला सूची बनाना चाहता हूं:

List(("Att1", getAtt1(), Int),
     ("Att2", getAtt2(), BigDecimal),
     ("Att3", getAtt3(), Long))

GetAtt1, getAtt2 और getAtt3 स्काला में आयात किए गए जावा ऑब्जेक्ट से आते हैं। मैं रूपांतरण जानने के लिए सूची के तीसरे पैरामीटर का उपयोग करता हूं। उदाहरण के लिए, getAtt3() एक इंट देता है और मेरी सूची मुझे बताती है कि मुझे इसे लंबे समय तक बदलने की जरूरत है।

मैं स्कैला 2.11.8 का उपयोग करता हूं।

क्या आपको कोई जानकारी है?

2
a.moussa 13 जुलाई 2017, 12:27
केस क्लास नंबर के लिए यह एक अच्छा उम्मीदवार है?
 – 
airudah
13 जुलाई 2017, 12:31
दरअसल, लेकिन मैं अपने केस क्लास फील्ड में एक विधि कैसे रख सकता हूं?
 – 
a.moussa
13 जुलाई 2017, 13:12
1
@a.moussa आप फ़ंक्शन प्रकारों का उपयोग कर सकते हैं: case class Conv(name: String, get: () => Int, convert: Int => Long)
 – 
Oleg Pyzhcov
13 जुलाई 2017, 13:13

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)

2
Haspemulator 13 जुलाई 2017, 14:25
बहुत मददगार, यही वह है जिसे मैं ढूंढ रहा था :)
 – 
a.moussa
13 जुलाई 2017, 14:52