स्काला में प्रतीक शाब्दिकों के लिए कुछ उदाहरण उपयोग के मामले क्या हैं?


93

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

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

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

धन्यवाद

जवाबों:


76

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

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

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


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

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

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

1
@ एलाज़र वे नहीं हैं, क्योंकि प्रतीक अपने मूल्य को नजरअंदाज करने पर भरोसा कर सकते हैं, जबकि स्ट्रिंग्स के साथ इसके वैकल्पिक और कुछ उपयोग-मामलों को अनुकूलित कर सकते हैं। प्रतीक कुछ भी की तुलना में गतिशील रूप से बनाए गए एनम की तरह अधिक हैं। मैंने अपने अंतिम उत्तर में जो उत्तर दिया, उस पर मैंने विस्तार से बताया; कृपया इसे और अधिक पढ़ें।
कैलम

3
तो, "नमस्ते, दुनिया!" वर्णों का क्रमबद्ध संग्रह है, जबकि 'हेलोवर्ल्ड 14392 के बजाय लोगों के अनुकूल मूल्य है।
सीडब्ल्यू होल्मैन II

26

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

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

यह लिंक इसकी अच्छी तरह से चर्चा करता है।


1
यह av सहायक स्पष्टीकरण है। यह मुझे
एनम

2

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

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.