रूबी में एक प्रतीक क्या है?


45

मैं रूबी दुनिया के लिए पूरी तरह से नया हूं, और मैं प्रतीकों की अवधारणा के साथ थोड़ा भ्रमित हूं। प्रतीकों और चर के बीच अंतर क्या है? सिर्फ चर का उपयोग क्यों नहीं?

धन्यवाद।


लिस्प में - जिसे रूबी से लिया गया है - एक प्रतीक अनिवार्य रूप से एक चर के लिए डेटाटाइप है; इसका मतलब है कि आप इस कार्यक्रम को एक परावर्तन-एस्के फैशन में हेरफेर कर सकते हैं क्योंकि यह निष्पादित होता है। (सबसे सुसंगत स्पष्टीकरण नहीं, खेद)
पॉल नाथन

जवाबों:


70

चर और प्रतीक अलग-अलग चीजें हैं। एक चर विभिन्न प्रकार के डेटा को इंगित करता है। रूबी में, एक प्रतीक एक चर की तुलना में एक स्ट्रिंग की तरह अधिक है।

रूबी में, एक स्ट्रिंग उत्परिवर्तनीय है, जबकि एक प्रतीक अपरिवर्तनीय है। इसका मतलब है कि प्रतीक की केवल एक प्रति बनाने की आवश्यकता है। इस प्रकार, यदि आपके पास है

x = :my_str
y = :my_str

:my_strकेवल एक बार बनाया जाएगा, और xऔर yस्मृति का एक ही क्षेत्र के लिए बिंदु। दूसरी ओर, यदि आपके पास है

x = "my_str"
y = "my_str"

स्ट्रिंग वाली my_strबनाया जाएगा दो बार , और xऔर yविभिन्न उदाहरणों को इंगित करेंगे।

नतीजतन, प्रतीकों को अक्सर रूबी में enums के बराबर के साथ-साथ एक शब्दकोश (हैश) की कुंजी के रूप में उपयोग किया जाता है।


1
बस @ मिपदी की बात को आगे बढ़ाने के लिए, जब आप एक स्ट्रिंग की तुलना करते हैं, तो आपको एक दूसरे के खिलाफ हर चरित्र की तुलना करने की आवश्यकता होती है। तो, समरूप तारों की तुलना O (n) है। जबकि माणिक प्रतीकों की तुलना वस्तु संदर्भ डायन हे (1) है।
जेरेमी हेइलर

अजगर के पास यह क्यों नहीं है?
जॉब

आप उन्हें अति प्रयोग भी के बाद से, पिछले मैं जानता था कि नहीं करने के लिए सावधान रहना चाहिए,, लेकिन मैं गहरे लाल रंग का> 1.9 में इस में देखा नहीं किया है, प्रतीकों gc'd नहीं मिलता और इतने स्मृति को खा सकते हैं
frogstarr78

वे स्मॉलटाकल में समान रूप से व्यवहार करते हैं, सिवाय इसके कि वे दिखते हैं #mySymbol
फ्रैंक शीयर

@ Frogstarr78 - जब तक आप प्रोग्राम को प्रतीक नहीं बना रहे हैं (पहले उनकी जांच किए बिना तार काटते हैं), तो आपको बहुत अधिक प्रतीकों को बनाने के बारे में चिंता करने की ज़रूरत नहीं है।
जस्टिन एल।

16

रूबी में प्रतीक मूल रूप से वास्तविक दुनिया में प्रतीक के समान है। इसका उपयोग किसी चीज को दर्शाने या नाम देने के लिए किया जाता है।

उदाहरण के लिए, प्रतीकों को आमतौर पर किसी प्रकार के राज्य का प्रतिनिधित्व करने के लिए उपयोग किया जाता है

order.status = :canceled
order.status = :confirmed

आप प्रतीक को तत्काल एनम के रूप में भी देख सकते हैं। आपको एक प्रतीक को परिभाषित करने की आवश्यकता नहीं है, आप इसका उपयोग करते हैं। यह लेख इसे काफी विस्तार से बताता है।


1
मैंने अब तक जितना भी देखा है, उससे बेहतर व्याख्या।
यूरी घेनसेव

0

आमतौर पर, चर स्ट्रिंग के साथ भ्रमित होते हैं, लेकिन मैं आपको एक चर की तरह सोचकर समझ सकता हूं। यह समझने लायक है। इस पर इस तरीके से विचार करें:

एक खेल में एक खिलाड़ी की स्थिति को एक संख्या द्वारा दर्शाया जाता है। 1 का अर्थ है जीवित, 2 का अर्थ है अनिश्चित, 3 का अर्थ है मृत। इसे आसानी से प्रतीकों द्वारा प्रतिस्थापित किया जा सकता है। प्रतीक :alive :unsureऔर हो सकते हैं :dead। यह जाँचने के लिए कि कोई खिलाड़ी जीवित है, इसके बजाय:

if player_status == 1

आप ऐसा कर सकते हैं:

if player_status == :alive

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