हर बार मुझे इसकी आवश्यकता होने पर लाइन-लम्बी ट्यूपल परिभाषा को दोहराना हमेशा अच्छा नहीं लगता है। क्या मैं इसे अभी नाम दे सकता हूं और एक प्रकार के नाम के रूप में उपयोग कर सकता हूं? भी की बजाय अपने खेतों नाम के लिए अच्छा ._1, ._2 आदिक्या मैं स्कैला 2.8 में एक टुपल (संरचना को परिभाषित कर सकता हूं?) नाम दे सकता हूं?
उत्तर
अपने पहले प्रश्न के बारे में उपयोग करते हुए किया जाएगा, तो आप बस एक प्रकार अन्य नाम का उपयोग कर सकते हैं:
type KeyValue = (Int, String)
, निश्चित रूप से और, स्काला एक है
case class KeyValue(key: Int, value: String) extends (Int, String)(key, value)
यह है कि: वस्तु उन्मुख भाषा है, तो कैसे एक टपल विशेषज्ञ के बारे में अपने दूसरे के बारे में, जादू शब्द विरासत है। कक्षा को शरीर की भी आवश्यकता नहीं है।
val kvp = KeyValue(42, "Hello")
kvp._1 // => res0: Int = 42
kvp.value // => res1: String = "Hello"
हालांकि, ध्यान दें कि इस मामले वर्गों से इनहेरिट (जो Tuple2
है), तो बहिष्कृत किया जाता है और भविष्य में अनुमति नहीं दी जा सकती है। यहाँ संकलक आप ऊपर वर्ग परिभाषा के लिए मिलता है चेतावनी है:
चेतावनी: मामले वर्ग
class KV
मामले वर्ग पूर्वजclass Tuple2
है। यह उपयोग और कार्यान्वयन दोनों को अनुचित रूप से जटिल करने के लिए बहिष्कृत कर दिया गया है। आपको गैर-पत्ती नोड्स पर पैटर्न मिलान के लिए निकालने वाले का उपयोग करना चाहिए।
प्रकार उर्फ अपने टपल नामकरण, लेकिन बजाय एक मामले वर्ग का उपयोग कर प्रयास के लिए ठीक है। आप टपल साथ
उदाहरण नामित पैरामीटर का उपयोग करने में सक्षम हो जाएगा:
def foo(a : Int) : (Int, String) = {
(a,"bar")
}
val res = foo(1)
val size = res._1
val name= res._2
एक मामले वर्ग के साथ
:
case class Result(size : Int , name : String)
def foo(a : Int) : Result = {
Result(a,"bar")
}
val res = foo(1)
val size = res.size
val name= res.name
यहाँ एक समाधान है कि एक प्रकार उर्फ और एक कारखाने वस्तु बनाता है।
scala> type T = (Int, String)
defined type alias T
scala> object T { def apply(i: Int, s: String): T = (i, s) }
defined module T
scala> new T(1, "a")
res0: (Int, String) = (1,a)
scala> T(1, "a")
res1: (Int, String) = (1,a)
हालांकि अन्य लोगों ने उल्लेख किया है, तो आपको शायद एक केस क्लास बनाना चाहिए।
हालांकि अन्य लोगों ने कहा है, स्पष्ट (केस) कक्षा सामान्य अर्थ में सर्वोत्तम हैं।
val (first, second) = incrementPair(3, 4)
println(s"$first ... $second")
एक टपल लौटने के लिए एक विधि को देखते हुए:
def incrementPair(pair: (Int, Int)) : (Int, Int) = {
val (first, second) = pair
(first + 1, second + 1)
}
- 1. क्या मैं सी ++ में संरचना को नष्ट कर सकता हूं?
- 2. क्या मैं स्कैला में ब्रांड्स को अधिभारित कर सकता हूं?
- 3. स्कैला - क्या मैं करीबी विधियों को अधिभारित कर सकता हूं?
- 4. रूबी में ब्लॉक को परिभाषित/नाम कैसे कर सकता हूं?
- 5. क्या मैं एक सी ++ मैक्रो को फिर से परिभाषित कर सकता हूं, फिर इसे वापस परिभाषित कर सकता हूं?
- 6. मैं LINQ में चर को कैसे परिभाषित कर सकता हूं?
- 7. क्या मैं एक मानचित्र परिभाषित कर सकता हूं जिसका कुंजी संरचना है?
- 8. स्कैला में, मैं सिंगलटन को एक कन्स्ट्रक्टर कैसे दे सकता हूं?
- 9. क्या मैं objdump को एक पता दे सकता हूं और इसे शामिल फ़ंक्शन को अलग कर सकता हूं?
- 10. मैं RichTextBox को एक फ्लैट लुक कैसे दे सकता हूं?
- 11. क्या मैं कन्स्ट्रक्टर को परिभाषित किए बिना ढेर पर एक नई संरचना बना सकता हूं?
- 12. मैं गिट को "क्या आपका मतलब" सुझाव दे सकता हूं?
- 13. मैं स्कैला में प्राइमेटिव का उपयोग कैसे कर सकता हूं?
- 14. मैं संरचना में सरणी कैसे घोषित कर सकता हूं?
- 15. मैं संरचना में फ़ंक्शन पॉइंटर कैसे स्टोर कर सकता हूं?
- 16. मैं पर्ल में एक शाब्दिक स्ट्रिंग में परिभाषित फ़ंक्शन नाम कैसे कॉल कर सकता हूं?
- 17. मैं फ़ील्ड सीमा रंग को कैसे परिभाषित कर सकता हूं?
- 18. क्या मैं एक ही समय में रीबेज कर सकता हूं और स्क्वैश कर सकता हूं?
- 19. मैं एक सी ++ प्रोग्राम एक आइकन कैसे दे सकता हूं?
- 20. मैं एक संपत्ति सेटर को कैसे ओवरराइड कर सकता हूं?
- 21. मैं स्कैला में एक विषम ऐरे कैसे बना सकता हूं?
- 22. मैं Struts2 में StreamResult के आउटपुट नाम को कैसे परिभाषित कर सकता हूं?
- 23. स्कैला: क्या मैं एक विकल्प को varargs में परिवर्तित कर सकता हूं?
- 24. क्या मैं स्कैला में कई तत्वों को एक तत्व उत्पन्न या मानचित्र कर सकता हूं?
- 25. क्या कोई तरीका है कि मैं लाटेक्स में एक चर परिभाषित कर सकता हूं?
- 26. क्या मैं जावास्क्रिप्ट में गतिशील ऑब्जेक्ट नाम बना सकता हूं?
- 27. मैं एक HTML तालिका पंक्ति में एक लिंक नाम कैसे दे सकता हूं?
- 28. क्या मैं प्ले फ्रेमवर्क 2.x (स्कैला) में एसिंक फॉर्म सत्यापन कर सकता हूं?
- 29. मैं स्कैला में किसी सदस्य को कैसे प्रतिनिधि दे सकता हूं?
- 30. स्कैला: मैं इंट टू यूनिट क्यों बदल सकता हूं?
tuples मामले की तुलना में तेजी से काम न करें
स्थानीय परिदृश्यों आप क्या कर सकते के लिएहालांकि tuple extractor उपयोग करने के लिए कोड पठनीयता में सुधार करने के लिए है कक्षाएं? यह कार्य सरल डेटा की बड़ी मात्रा, जटिल प्रकार की संख्या-क्रंचिंग की जटिल प्रसंस्करण है। – Ivan
@ इवान: टुपल्स * केस केस हैं, क्या वे नहीं हैं? –
टुपल्स वास्तव में केस कक्षाएं हैं! –