रूबी में प्रतीकों को कैसे समझा जाए


85

" रूबी सिंबल्स को समझना " पढ़ने के बावजूद , जब मैं प्रतीकों का उपयोग करने की बात करता हूं, तो स्मृति में डेटा के प्रतिनिधित्व से मैं अभी भी भ्रमित हूं। यदि एक प्रतीक, उनमें से दो अलग-अलग वस्तुओं में समाहित हैं, एक ही मेमोरी लोकेशन में मौजूद हैं, तो यह कैसे होता है कि उनमें अलग-अलग मूल्य होते हैं? मैंने समान मान को सम्‍मिलित करने के लिए समान मेमोरी स्‍थान की अपेक्षा की है।

इस लिंक से एक उद्धरण:

स्ट्रिंग्स के विपरीत, एक ही नाम के प्रतीकों को आरंभीकृत किया जाता है और रूबी के सत्र के दौरान केवल एक बार मेमोरी में मौजूद होता है

मुझे समझ में नहीं आता कि यह एक ही मेमोरी लोकेशन में निहित मूल्यों को कैसे अलग करता है।

इस उदाहरण पर विचार करें:

patient1 = { :ruby => "red" }
patient2 = { :ruby => "programming" }

patient1.each_key {|key| puts key.object_id.to_s}
3918094
patient2.each_key {|key| puts key.object_id.to_s}
3918094

patient1और patient2दोनों हैश हैं, यह ठीक है। :rubyहालाँकि एक प्रतीक है। यदि हम निम्नलिखित उत्पादन करने के लिए थे:

patient1.each_key {|key| puts key.to_s}

फिर आउटपुट क्या होगा? "red", या "programming"?

एक सेकंड के लिए हैश को भूल जाना, मैं सोच रहा हूं कि एक प्रतीक एक मूल्य का सूचक है। मेरे पास जो प्रश्न हैं:

  • क्या मैं एक प्रतीक को एक मूल्य प्रदान कर सकता हूं?
  • क्या एक प्रतीक केवल एक चर के लिए एक संकेतक है जिसमें एक मान है?
  • यदि प्रतीक वैश्विक हैं, तो क्या इसका मतलब यह है कि एक प्रतीक हमेशा एक चीज की ओर इशारा करता है?

1
यह ": माणिक" का उत्पादन करेगा, क्योंकि आप एक प्रतीक छाप रहे हैं। यदि आप कहते हैं puts patient1[:ruby], तो यह "लाल" प्रिंट करेगा, यदि आप कहते हैं puts patient2[:ruby], तो यह "प्रोग्रामिंग" प्रिंट करेगा।
रॉस

1
एक प्रतीक एक मान का सूचक नहीं है। आंतरिक रूप से एक प्रतीक सिर्फ एक पूर्णांक है।
अकुंठ

जवाबों:


62

इस पर विचार करो:

x = :sym
y = :sym
(x.__id__ == y.__id__ ) && ( :sym.__id__ == x.__id__) # => true

x = "string"
y = "string"
(x.__id__ == y.__id__ ) || ( "string".__id__ == x.__id__) # => false

इसलिए, हालांकि आप एक प्रतीक वस्तु बनाते हैं, जब तक कि इसकी सामग्री समान है, यह स्मृति में उसी वस्तु को संदर्भित करेगा। यह कोई समस्या नहीं है क्योंकि एक प्रतीक एक अपरिवर्तनीय वस्तु है । तार परस्पर जुड़े हुए हैं।


(नीचे टिप्पणी के जवाब में)

मूल लेख में, मूल्य एक प्रतीक में संग्रहीत नहीं किया जा रहा है, इसे एक हैश में संग्रहीत किया जा रहा है। इस पर विचार करो:

hash1 = { "string" => "value"}
hash2 = { "string" => "value"}

यह मेमोरी में छह ऑब्जेक्ट बनाता है - चार स्ट्रिंग ऑब्जेक्ट और दो हैश ऑब्जेक्ट।

hash1 = { :symbol => "value"}
hash2 = { :symbol => "value"}

यह केवल पाँच वस्तुओं को स्मृति में बनाता है - एक प्रतीक, दो तार और दो हैश ऑब्जेक्ट।


लिंक में उदाहरण, हालांकि, विभिन्न मूल्यों वाले प्रतीकों को दर्शाता है , लेकिन प्रतीक का एक ही नाम है, और एक ही स्मृति स्थान है। जब वे आउटपुट होते हैं, तो उनके अलग-अलग मूल्य होते हैं, यही वह हिस्सा है जो मुझे नहीं मिलता है। निश्चित रूप से उन्हें समान मूल्य होना चाहिए?
केजर

1
मैंने कोशिश करने और समझाने के लिए एक संपादन किया है कि मैं अभी भी कैसे उलझन में हूं। मेरा मस्तिष्क गणना नहीं कर सकता है;)
केजर

48
प्रतीक मान शामिल नहीं है, वे कर रहे हैं मान। Hashes में मान होते हैं।
म्लादेन जेबलानोविक

5
यह Hash(आपके कोड में {... => ...} द्वारा बनाया गया है) कुंजी / मूल्य जोड़े को संग्रहीत करता है, Symbolस्वयं नहीं। Symbolरों (जैसे :symbolया :symया :ruby) जोड़ों में चाबियाँ हैं। केवल Hashवे किसी भी चीज़ के लिए "बिंदु" के हिस्से के रूप में ।
जेम्स ए। रोसेन

1
प्रतीक का उपयोग हैश में मान के रूप में किया जा रहा है, न कि मूल्य में, इसलिए वे भिन्न हो सकते हैं, यह Key1 = 'माणिक' और hash1 = {key1 => 'value' ...} हैश 2 = { की 1 => 'मान 2' ...}।
जोशुआ ओल्सन

53

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

प्रतीकों को निरंतर तार के रूप में सोचें।


2
पदों के माध्यम से पढ़ना, यह शायद मेरे लिए सबसे अधिक समझ में आता है। : रूबी सिर्फ स्मृति में कहीं संग्रहीत है, अगर मैं कहीं "रूबी" का उपयोग करता हूं, तो "रूबी" फिर से कहीं और फिर से, यह सिर्फ दोहराव है। इसलिए प्रतीकों का उपयोग करना आम डेटा के दोहराव को कम करने का एक तरीका है। जैसा कि आप कहते हैं, निरंतर तार। मुझे लगता है कि कुछ अंतर्निहित तंत्र है जो उस प्रतीक को फिर से उपयोग करने के लिए पाएंगे?
केजर

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

तो यह मूल रूप से एक स्ट्रिंग का अविश्वसनीय रूप से हल्का-वजन संस्करण है?
stevec

34

प्रतीक :rubyमें "red"या नहीं है "programming"। प्रतीक :rubyसिर्फ प्रतीक है :ruby। यह आपकी हैश है, patient1और patient2प्रत्येक में वे मान शामिल हैं, जो प्रत्येक मामले में एक ही कुंजी द्वारा इंगित किए गए हैं।

इसके बारे में इस तरह से सोचें: यदि आप क्रिसमस की सुबह जीवित कमरे में जाते हैं, और उन पर एक टैग के साथ दो बक्से देखें जो उन पर "केज़र" कहते हैं। इसमें मोज़े हैं, और दूसरे में कोयला है। आप भ्रमित होने वाले नहीं हैं और पूछते हैं कि "केज़र" में मोजे और कोयले दोनों शामिल हो सकते हैं, भले ही यह एक ही नाम हो। क्योंकि नाम (भद्दा) प्रस्तुत नहीं है। यह सिर्फ उनकी ओर इशारा कर रहा है। इसी तरह, :rubyआपके हैश में मान शामिल नहीं हैं, यह सिर्फ उन पर इंगित करता है।


2
यह उत्तर पूर्ण समझ में आता है।
वास

यह हैश और प्रतीकों के कुल मिश्रण की तरह लगता है। एक प्रतीक एक मूल्य की ओर इशारा नहीं करता है, अगर आप कहना चाहते हैं कि यह कब हैश में है, ठीक है, तो यह तर्कपूर्ण हो सकता है, लेकिन एक प्रतीक को हैश में होना जरूरी नहीं है। आप कह सकते हैं mystring = :steveT कि प्रतीक किसी भी चीज़ की ओर इशारा नहीं करता है। हैश में एक कुंजी का एक संबद्ध मूल्य होता है, और कुंजी एक प्रतीक हो सकती है। लेकिन एक प्रतीक हैश में नहीं होना चाहिए।
बार्लोप

27

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

अपने उदाहरण के मामले को लें:

patient1 = { :ruby => "red" }

इसे इस रूप में पढ़ा जाना चाहिए: "एक परिवर्तनशील रोगी को घोषित करें और इसे एक हैश के रूप में परिभाषित करें, और इस स्टोर में कुंजी (प्रतीक 'रूबी') के तहत 'लाल' मान रखें"

इसे लिखने का दूसरा तरीका है:

patient1 = Hash.new
patient1[:ruby] = 'red'

puts patient1[:ruby]
# 'red'

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

प्रतीक अवधारणा थोड़ी भ्रमित करने वाली हो सकती है क्योंकि यह अधिकांश अन्य भाषाओं की विशेषता नहीं है।

प्रत्येक स्ट्रिंग ऑब्जेक्ट भिन्न है भले ही मान समान हैं:

[ "foo", "foo", "foo", "bar", "bar", "bar" ].each do |v|
  puts v.inspect + ' ' + v.object_id.to_s
end

# "foo" 2148099960
# "foo" 2148099940
# "foo" 2148099920
# "bar" 2148099900
# "bar" 2148099880
# "bar" 2148099860

समान मूल्य वाला प्रत्येक प्रतीक एक ही वस्तु को संदर्भित करता है:

[ :foo, :foo, :foo, :bar, :bar, :bar ].each do |v|
  puts v.inspect + ' ' + v.object_id.to_s
end

# :foo 228508
# :foo 228508
# :foo 228508
# :bar 228668
# :bar 228668
# :bar 228668

प्रतीकों को स्ट्रिंग में परिवर्तित करना समान अद्वितीय प्रतीक के समान मूल्यों को मैप करता है:

[ "foo", "foo", "foo", "bar", "bar", "bar" ].each do |v|
  v = v.to_sym
  puts v.inspect + ' ' + v.object_id.to_s
end

# :foo 228508
# :foo 228508
# :foo 228508
# :bar 228668
# :bar 228668
# :bar 228668

इसी तरह, सिंबल से स्ट्रिंग में परिवर्तित करना हर बार एक अलग स्ट्रिंग बनाता है:

[ :foo, :foo, :foo, :bar, :bar, :bar ].each do |v|
  v = v.to_s
  puts v.inspect + ' ' + v.object_id.to_s
end

# "foo" 2148097820
# "foo" 2148097700
# "foo" 2148097580
# "bar" 2148097460
# "bar" 2148097340
# "bar" 2148097220

आप एक आंतरिक हैश टेबल से प्रतीक के मानों को खींचा जा सकता है और आप उन सभी मूल्यों को देख सकते हैं जिन्हें एक सरल विधि कॉल का उपयोग करके प्रतीकों को एन्कोड किया गया है:

Symbol.all_values

# => [:RUBY_PATCHLEVEL, :vi_editing_mode, :Separator, :TkLSHFT, :one?, :setuid?, :auto_indent_mode, :setregid, :back, :Fail, :RET, :member?, :TkOp, :AP_NAME, :readbyte, :suspend_context, :oct, :store, :WNOHANG, :@seek, :autoload, :rest, :IN_INPUT, :close_read, :type, :filename_quote_characters=, ...

जैसा कि आप नए प्रतीकों को या तो बृहदान्त्र-संकेतन द्वारा या .to_sym का उपयोग करके परिभाषित करते हैं।


17

प्रतीक संकेत नहीं हैं। उनमें मूल्य नहीं हैं। प्रतीक बस हैं:rubyप्रतीक है :rubyऔर यही सब कुछ है। इसमें कोई मान नहीं है , यह कुछ भी नहीं करता है, यह सिर्फ प्रतीक के रूप में मौजूद है :ruby। प्रतीक :rubyएक मूल्य है जैसे नंबर 1 है। यह संख्या 1 की तुलना में किसी भी अधिक मूल्य की ओर इशारा नहीं करता है।


13
patient1.each_key {|key| puts key.to_s}

फिर आउटपुट क्या होगा? "लाल", या "प्रोग्रामिंग"?

न तो, यह "माणिक" का उत्पादन करेगा।

आप प्रतीकों और हैश को भ्रमित कर रहे हैं। वे संबंधित नहीं हैं, लेकिन वे एक साथ उपयोगी हैं। प्रश्न में प्रतीक है :ruby; इसका हैश में मूल्यों से कोई लेना-देना नहीं है, और यह आंतरिक पूर्णांक प्रतिनिधित्व हमेशा समान रहेगा, और यह "मूल्य" (जब एक स्ट्रिंग में परिवर्तित हो जाता है) हमेशा "रूबी" होगा।


10

संक्षेप में

प्रतीक मानव पठनीय, अपरिवर्तनीय अभ्यावेदन बनाने की समस्या को हल करते हैं, जिसमें स्ट्रिंग्स की तुलना में रनटाइम देखने के लिए सरल होने का लाभ भी होता है। इसे एक नाम या लेबल की तरह समझें जिसका पुन: उपयोग किया जा सकता है।

क्यों: लाल "लाल" से बेहतर है

गतिशील ऑब्जेक्ट ओरिएंटेड भाषाओं में आप पठनीय संदर्भों के साथ जटिल, नेस्टेड डेटा स्ट्रक्चर्स बनाते हैं। हैश एक आम उपयोग है अद्वितीय, कम से कम, प्रत्येक उदाहरण के लिए - जहां अद्वितीय कुंजी को मान मैप। आपके पास हैश की एक से अधिक "लाल" कुंजी नहीं हो सकती है।

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

लाभ

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

चूँकि: लाल हमेशा स्मृति में एक ही स्थान पर वापस आ जाता है, इसे एक सौ हैश उदाहरणों में पुन: उपयोग किया जा सकता है, जिसमें लगभग मेमोरी में कोई वृद्धि नहीं होती है, जबकि "लाल" का उपयोग करने से मेमोरी की लागत बढ़ जाएगी क्योंकि प्रत्येक हैश उदाहरण पर म्यूटेबल स्ट्रिंग को स्टोर करने की आवश्यकता होगी सृष्टि।

यह निश्चित नहीं है कि रूबी वास्तव में प्रतीकों / स्ट्रिंग को कैसे लागू करती है लेकिन स्पष्ट रूप से एक प्रतीक रनटाइम में कम कार्यान्वयन ओवरहेड प्रदान करता है क्योंकि यह एक निश्चित प्रतिनिधित्व है। प्लस प्रतीक एक उद्धृत स्ट्रिंग की तुलना में टाइप करने के लिए एक कम चरित्र लेता है और कम टाइपिंग सच्चे रूबिस्टों की शाश्वत खोज है।

सारांश

जैसे एक प्रतीक के साथ: लाल आपको स्ट्रिंग तुलनात्मक संचालन की लागत और स्मृति में प्रत्येक स्ट्रिंग उदाहरण को संग्रहीत करने की आवश्यकता के कारण कम ओवरहेड के साथ स्ट्रिंग प्रतिनिधित्व की पठनीयता मिलती है।


4

मैं हैश टेबल पर विकिपीडिया लेख पढ़ने की सलाह दूंगा - मुझे लगता है कि इससे आपको {:ruby => "red"}वास्तव में इसका मतलब निकालने में मदद मिलेगी ।

एक और अभ्यास जो स्थिति की आपकी समझ में मदद कर सकता है: विचार करें {1 => "red"}। शब्दार्थ इसका मतलब यह नहीं "का मान सेट 1करने के लिए "red"है, जो रूबी में असंभव है"। बल्कि, इसका मतलब है "एक हैश ऑब्जेक्ट बनाएं , और "red"कुंजी के लिए मूल्य संग्रहीत करें 1


3
patient1 = { :ruby => "red" }
patient2 = { :ruby => "programming" }

patient1.each_key {|key| puts key.object_id.to_s}
3918094
patient2.each_key {|key| puts key.object_id.to_s}
3918094

patient1और patient2दोनों हैश हैं, यह ठीक है। :rubyहालाँकि एक प्रतीक है। यदि हम निम्नलिखित उत्पादन करने के लिए थे:

patient1.each_key {|key| puts key.to_s}

फिर आउटपुट क्या होगा? "लाल", या "प्रोग्रामिंग"?

न ही, बिल्कुल। आउटपुट होगा ruby। जो, BTW, आपको कम समय में पता चल सकता था जितना कि आपको प्रश्न टाइप करने के लिए लिया गया था, बस इसे आईआरबी में टाइप करके।

क्यों होता है यह हो redया programming? प्रतीक हमेशा खुद का मूल्यांकन करते हैं। प्रतीक :rubyका मूल्य :rubyस्वयं प्रतीक है और प्रतीक का स्ट्रिंग प्रतिनिधित्व :rubyस्ट्रिंग मूल्य है "ruby"

[बीटीडब्ल्यू: putsहमेशा अपने तर्कों को स्ट्रिंग्स में परिवर्तित करता है, वैसे भी। इस to_sपर कॉल करने की कोई आवश्यकता नहीं है।]


मेरे पास वर्तमान मशीन पर आईआरबी नहीं है, न ही मैं इसे स्थापित कर पाऊंगा इसलिए, इसलिए इसके लिए मेरी माफी।
केजर

2
@ कीज़र: कोई चिंता नहीं, मैं तो उत्सुक था। कभी-कभी आप अपने आप को एक समस्या में इतना गहरा दबा लेते हैं कि आप सरल चीजों को भी नहीं देख पाते हैं। जब मैंने आईआरबी में आपके प्रश्न को मूल रूप से काट दिया और चिपका दिया, तो मुझे आश्चर्य हुआ: "उसने खुद ऐसा क्यों नहीं किया?" और चिंता न करें, आप पहले नहीं हैं (और न ही आप आखिरी होंगे) जो पूछता है कि "यह क्या प्रिंट करता है" जब जवाब है तो बस इसे चलाएं! " BTW: यहाँ आपका तत्काल IRB, कहीं भी, कभी भी, कोई भी आवश्यक स्थापना नहीं है: TryRuby.Org या Ruby-Versions.Net आपको कभी भी जारी MRI के सभी संस्करणों + YARV + JRuby / रुबिनियस + REE तक पहुंच प्रदान करता है।
जोर्ज डब्ल्यू मित्तग

धन्यवाद, बस अब इसके साथ खेल रहा है। मैं अभी भी थोड़ा उलझन में हूँ, लेकिन इस पर फिर से जा रहा हूँ।
केजर

0

मैं रूबी के लिए नया हूं, लेकिन मुझे लगता है (आशा?) यह देखने का एक सरल तरीका है ...

एक प्रतीक एक चर या एक स्थिर नहीं है। यह एक मूल्य के लिए, या इंगित करने के लिए खड़ा नहीं है। एक प्रतीक एक मूल्य है।

यह सब है, वस्तु उपरि के बिना एक स्ट्रिंग है। पाठ और केवल पाठ।

तो यह:

"hellobuddy"

इस प्रकार है:

:hellobuddy

सिवाय इसके कि आप ऐसा नहीं कर सकते, उदाहरण के लिए: hellobuddy.upcase। यह स्ट्रिंग मान है और केवल स्ट्रिंग मान है।

इसी तरह, यह:

greeting =>"hellobuddy"

इस प्रकार है:

greeting => :hellobuddy

लेकिन, फिर से, स्ट्रिंग ऑब्जेक्ट के बिना ओवरहेड।


-1

अपने सिर को इसके चारों ओर लपेटने का एक आसान तरीका यह है कि, "क्या होगा अगर मैं प्रतीक के बजाय एक स्ट्रिंग का उपयोग कर रहा था?"

patient1 = { "ruby" => "red" }
patient2 = { "ruby" => "programming" }

यह बिल्कुल भी भ्रामक नहीं है? आप "रूबी" का उपयोग हैश में एक कुंजी के रूप में कर रहे हैं ।

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

हैश तो चला जाता है "मेरे कुंजी मान क्या? ओह यह है "ruby"। तो फिर उस मान को नक्शे" लाल "या" प्रोग्रामिंग "। दूसरे शब्दों में, :rubyकरने के लिए भिन्नता नहीं है "red"या "programming"। हैश नक्शे :ruby को "red"या "programming"

तुलना करें कि क्या हम प्रतीकों का उपयोग करते हैं

patient1 = { :ruby => "red" }
patient2 = { :ruby => "programming" }

का मूल्य :rubyभी "ruby"प्रभावी रूप से है।

क्यों? क्योंकि प्रतीक अनिवार्य रूप से स्ट्रिंग स्थिरांक हैं । लगातार कई उदाहरण नहीं हैं। यह एक ही मेमोरी एड्रेस है। और एक मेमोरी एड्रेस का एक निश्चित मूल्य होता है, एक बार डिरेल होने के बाद। प्रतीकों के लिए सूचक नाम, प्रतीक है, और dereferenced मान एक स्ट्रिंग है, जो प्रतीक नाम से मेल खाता है, इस मामले में है "ruby"

जब एक हैश में, आप प्रतीक, सूचक का उपयोग नहीं कर रहे हैं, लेकिन स्थगित मान। आप उपयोग नहीं कर रहे हैं :ruby, लेकिन "ruby"। हैश तब कुंजी के लिए देखता है "ruby", मान है "red"या "programming", इस पर निर्भर करता है कि आपने हैश को कैसे परिभाषित किया है।

प्रतिमान बदलाव और टेक-होम अवधारणा यह है कि एक प्रतीक का मूल्य एक हैश द्वारा मैप किए गए मूल्य से पूरी तरह से अलग अवधारणा है, उस हैश की एक कुंजी दी गई है।


इस व्याख्या में क्या गिरावट या त्रुटि है, डाउनवोटर्स? सीखने के लिए उत्सुक।
अहानजकद

सिर्फ इसलिए कि एक सादृश्य कुछ के लिए अरुचिकर हो सकता है, इसका मतलब यह नहीं है कि यह त्रुटिपूर्ण है।
एहनबेकद

2
मुझे कोई त्रुटि दिखाई नहीं देती, जरूरी है, लेकिन इस उत्तर में आप जो कहना चाह रहे हैं उसे बता पाना बेहद मुश्किल है।
उल्टा इंजीनियर

एक्स की व्याख्या की जाती है और व्याख्या करने वाले संदर्भ / इकाई के आधार पर अलग-अलग अवधारणा की जाती है। बहुत साधारण।
अहानजकद

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