2009-04-23 9 views
79

प्रतीक अक्षर का उपयोग स्कैला पर जो मैंने पढ़ा है उससे तुरंत स्पष्ट नहीं है। क्या कोई वास्तविक दुनिया के उपयोगों को साझा करने की देखभाल करेगा?स्कैला में प्रतीक अक्षर के लिए कुछ उदाहरण उपयोग उदाहरण क्या हैं?

क्या कोई विशेष जावा मुहावरे प्रतीक अक्षर द्वारा कवर किया जा रहा है? कौन सी भाषाओं में समान संरचनाएं हैं? मैं एक पायथन पृष्ठभूमि से आ रहा हूं और यह सुनिश्चित नहीं करता कि उस भाषा में कुछ भी समान है।

मुझे 'हैलोवर्ल्ड बनाम "हैलोवर्ल्ड" का उपयोग करने के लिए क्या प्रेरित करेगा?

धन्यवाद

उत्तर

62

जावा शब्दों में, प्रतीक आंतरिक तार हैं। इसका मतलब है, उदाहरण के लिए, उस संदर्भ समानता तुलना (जावा में eq और जावा में ==) जावा में सामान्य समानता तुलना (== और स्केल में equals) के समान परिणाम देता है: 'abcd eq 'abcd सत्य वापस आ जाएगा, जबकि "abcd" eq "abcd" शायद JVM के आधार पर नहीं हो सकता है whims (ठीक है, यह अक्षर के लिए होना चाहिए, लेकिन सामान्य रूप से गतिशील रूप से बनाए गए तारों के लिए नहीं)।

अन्य भाषाओं जो प्रतीकों का उपयोग लिस्प (जो स्काला की तरह 'abcd उपयोग करता है), रूबी (:abcd), Erlang और Prolog हैं (abcd, वे बजाय प्रतीकों के परमाणुओं कहा जाता है)।

मैं एक प्रतीक का उपयोग करता हूं जब मुझे स्ट्रिंग की संरचना की परवाह नहीं होती है और इसे किसी चीज़ के नाम के रूप में पूरी तरह से उपयोग किया जाता है। उदाहरण के लिए, यदि मेरे पास सीडी का प्रतिनिधित्व करने वाली डेटाबेस तालिका है, जिसमें "मूल्य" नामक कॉलम शामिल है, तो मुझे परवाह नहीं है कि "मूल्य" में दूसरा अक्षर "आर" है, या कॉलम नामों को संयोजित करने के बारे में; इसलिए स्कैला में एक डेटाबेस लाइब्रेरी तालिका और स्तंभ नामों के लिए प्रतीकों का उचित रूप से उपयोग कर सकती है।

+22

हो सकता है यह शायद याद रखना लायक है कि == स्कैला में करता है।चीज के बराबर होती है, इसलिए वास्तव में अंतर "ईक" विधि का उपयोग करते समय होता है जो संदर्भ समानता करता है। हालांकि, एक बोनस यह है कि प्रतीकों के बीच तुलना बेहद सस्ता है। – Calum

+0

@ कोलम, जैसा कि दो तारों के बीच तुलना है। जावा इंटर्न (अधिक या कम) सभी तारों। –

+4

@Elazar: क्या यह वाकई सच है? मैं इस धारणा के तहत था कि जावा ने केवल अक्षरशः इंटर्न किया था (यानी लगभग सभी तारों को छोटे उदाहरणों में, और उत्पादन सॉफ्टवेयर में लगभग कोई तार नहीं)। कहा जाता है कि प्रतीकों के उपयोग-मामलों आमतौर पर शाब्दिक मूल्यों के रूप में होते हैं (मुझे संदेह है कि आप अक्सर उन्हें खरोंच से बनाते हैं), इसलिए तर्कसंगत रूप से आपको प्राप्त होने वाला मुख्य लाभ केवल एक और वर्णनात्मक प्रकार है। – Calum

24

आप कहते हैं कि कोड में विधि के नाम का प्रतिनिधित्व करने सादा तार है, कि शायद चारों ओर से पारित कर दिया हो, तो आप काफी बातें उचित रूप से संदेश नहीं कर रहे हैं। यह डेटा/कोड सीमा मुद्दा है, लाइन को आकर्षित करना हमेशा आसान नहीं होता है, लेकिन अगर हम कहें कि उस उदाहरण में उन विधि नाम डेटा से अधिक कोड हैं, तो हम कुछ स्पष्ट रूप से पहचानना चाहते हैं ।

एक सिंबल लिटलल खेल में आता है जहां यह कोड में उपयोग किए जाने वाले निर्माण के साथ किसी पुराने स्ट्रिंग डेटा को स्पष्ट रूप से अलग करता है। यह वास्तव में वहां है जहां आप इंगित करना चाहते हैं, यह केवल कुछ स्ट्रिंग डेटा नहीं है, बल्कि वास्तव में कोड के कुछ हिस्सों में है। आपके आईडीई जैसी चीजें होने पर विचार अलग-अलग हाइलाइट करेगा, और टूलींग देने के बाद, आप पाठ खोज/प्रतिस्थापन करने के बजाय उन पर प्रतिक्रिया कर सकते हैं।

यह link इसे काफी अच्छी तरह से चर्चा करता है।

+1

यह एक वी सहायक स्पष्टीकरण है। यह मुझे enums के विकल्पों के संदर्भ में सोचता है - जो बेकार – javadba

1

पायथन सभी चर, कार्यों, मॉड्यूल इत्यादि के नामों के साथ "आंतरिक तार" की आंतरिक वैश्विक तालिका का लाभ देता है। इस तालिका के साथ, दुभाषिया तेजी से खोज और अनुकूलन कर सकता है। आप इस प्रक्रिया को intern फ़ंक्शन (sys.intern पायथन 3 में) के साथ मजबूर कर सकते हैं।

इसके अलावा, जावा और स्कैला स्वचालित रूप से "आंतरिक तार" का उपयोग तेजी से खोज के लिए करते हैं। स्कैला के साथ, आप स्ट्रिंग के इंटर्न को मजबूर करने के लिए intern विधि का उपयोग कर सकते हैं, लेकिन यह प्रक्रिया सभी तारों के साथ काम नहीं करती है। प्रतीकों को प्रशिक्षित करने की गारंटी होने से लाभ होता है, इसलिए समानता समानता जांच समानता या असमानता साबित करने के लिए पर्याप्त होती है।

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