2012-09-28 10 views
7

मेरे पास स्कैला में एक विधि है जो एक ट्यूपल देता है, मान लीजिए कि विधि को 'टेस्ट' कहा जाता है। तब मैंएक अपरकेस चर में पैटर्न कैसे मिलान करें?

val (X,Y) = test() 

करने के लिए हालांकि चाहते हैं, पैटर्न मिलान केवल स्काला में काम करता है जब चर नाम लोअरकेस कर रहे हैं, अर्थात्:

val(_X,_Y) = test(); val X = _X; val Y = _Y 

... ठीक काम करता है, लेकिन बदसूरत है, और नहीं संक्षिप्त। चूंकि एक्स और वाई matrices हैं, मैं वास्तव में लोअरकेस चर का उपयोग नहीं करना चाहता। (Scipy और matlab में, मैं उदाहरण के लिए इस तरह के प्रतिबंध नहीं होगा)।

मुझे लगता है कि यह सुनिश्चित करने के लिए कुछ तरीका है कि लोअरकेस वैरिएबल अपरकेस वाले लोगों की तरह व्यवहार करते हैं, यानी 'x` कर रहे हैं। शायद अपरकेस चर बनाने के कुछ तरीके को लोअरकेस वाले की तरह व्यवहार करना है? तो, यह मेरा सवाल है: क्या स्काला में सीधे अपरकेस चर में मिलान पैटर्न का कोई तरीका है?

उत्तर

6

संक्षिप्त उत्तर नहीं है।

सिंटेक्स सम्मेलन आपके कोड को दूसरों के लिए पठनीय और समझने योग्य बनाते हैं। स्कैला का सम्मेलन यह है कि चर-मामले और स्थिरांक के साथ चर शुरू होते हैं और कक्षाएं ऊपरी मामले से शुरू होती हैं। इसका उल्लंघन करके, न केवल आपको पैटर्न-मिलान करने वाले मुद्दों जैसी समस्याएं मिलती हैं, आपका कोड कम पठनीय हो जाता है। (मेरा विश्वास करो, अगर आपको किसी ऐसे व्यक्ति द्वारा लिखे गए कोड को पढ़ना है जिसने इस तरह के सम्मेलनों की परवाह नहीं की है, तो आप उस व्यक्ति को शाप देंगे।)

यदि आप इस बात पर जोर देना चाहते हैं कि चर मैट्रिक्स हैं, तो मेरा सुझाव है आप xMatrix और yMatrix या ऐसा कुछ उपयोग करने के लिए उपयोग करें। यह स्पष्ट करेगा कि वे चर हैं और वे matrices का प्रतिनिधित्व करते हैं।

या एक सम्मेलन अपनी परियोजना है कि सभी मैट्रिक्स चर मान लीजिए कि "एम", xM और yM पसंद करते हैं के साथ खत्म हो जाएगा करने के लिए विशिष्ट बना सकते हैं।

यदि यह आपके कोड को पठनीय बनाता है तो कुछ और वर्ण टाइप करना उचित है।

+4

मुझे लगता है कि ऐसी भाषा के बारे में कुछ अजीब बात है जो आपको भाषा की खोज के पहले 20 घंटों के लिए अपरकेस वैरिएबल नामों का उपयोग करने देती है, फिर अचानक एक छोटे से छोटे, लेकिन उपयोगी, उपयोग के लिए, अचानक यह तय करता है कि, नहीं, अपरकेस चर , अनुमति नहीं हैं! –

+0

@ ह्यूगर्किन्स मैं उससे सहमत हूं। और यह भी गड़बड़ हो जाता है: स्कैला आपको स्थिरांक पर पैटर्न-मिलान करने की अनुमति देता है, जिसे ऊपरी-केस नामों वाले चर के रूप में परिभाषित किया जाता है।कुछ 'वैल मायकॉन्स्ट = "टेक्स्ट" की तरह; कुछ स्ट्रिंग मैच {केस MyConst => ...; ...} '। यह बहुत भ्रम का कारण बनता है। सबसे समझदार नियम केवल शीर्ष-स्तरीय स्थिरांक के लिए ऊपरी-केस का उपयोग करना है और अन्य सभी स्थानों पर लोअर-केस का उपयोग करना है। –

+0

ठीक है, ठीक है, किसी ने भी प्रश्न का सकारात्मक उत्तर प्रदान नहीं किया है, इसलिए मैं आपके उत्तर को अभी उत्तर के रूप में चिह्नित करूंगा, खासकर जब आपने कुछ रचनात्मक विचार प्रदान किए हैं कि इस प्रकार को निर्दिष्ट करने में सक्षम होने की कमी के आसपास कैसे काम करना है स्केल में एक चर के (स्थिर बनाम चर)। –

1

ऐसा करने का कोई तरीका नहीं है और वहां नहीं होना चाहिए। आपके पास पहले से ही वैरिएबल का प्रकार है जो आपको बताता है कि यह एक मैट्रिक्स है, इसलिए परिवर्तनीय नाम अपरकेस बनाने की कोई आवश्यकता नहीं है।

+0

यह सामान्य उद्देश्य सॉफ्टवेयर विकास के लिए सच हो सकता है (मैं यह नहीं कह रहा हूं, लेकिन मैं बहस नहीं कर रहा हूं कि यह नहीं है) लेकिन मैं मशीन सीखने के लिए उपयोग को लक्षित कर रहा हूं, जहां एक्स का अर्थ है ' सभी डेटा पॉइंट ', और एक्स का अर्थ है' एक डेटा पॉइंट '। यह मानक संकेत है, उदाहरण के लिए बिशप, "पैटर्न पहचान और मशीन लर्निंग", पृष्ठ 141 देखें। निश्चित रूप से, कोई एक कोड को भाषा से मेल खाने के तरीके को बदल सकता है, लेकिन हमारी जिंदगी को आसान बनाने के लिए वहां भाषा नहीं है, दूसरी नहीं निकलने का रास्ता? scipy और matlab और जावा और सी ++ सभी एक्स के उपयोग के रूप में एक मैट्रिक्स के नाम के रूप में अनुमति देते हैं। –

+0

बेशक यह गणित में मानक संकेत है, जैसे एक्स और एक्स स्केल में मानक नोटेशन हैं। हालांकि, इनमें से कोई भी साधारण तथ्य को बदलता है कि आप जो करना चाहते हैं वह काम नहीं करेगा। –

+0

वास्तव में मैं तर्क दूंगा कि चर के पास कंपाइलर/रनटाइम को बताने के लिए एक प्रकार होना चाहिए चाहे वह स्थिर या चर हो। मुझे यकीन नहीं है कि एफपी दुनिया में टाइप को अलग करने के लिए ऊपरी/लोअरकेस का उपयोग करना आम है, लेकिन यह ओओ दुनिया में थोड़ा ... असामान्य ... लगता है। –

संबंधित मुद्दे