जवाबों:
हां, वहां एक अंतर है। ये कानूनी हैं:
h = { :$in => array }
h = { :'a.b' => 'c' }
h[:s] = 42
लेकिन ये नहीं हैं:
h = { $in: array }
h = { 'a.b': 'c' } # but this is okay in Ruby2.2+
h[s:] = 42
आप एक कुंजी के रूप में कुछ भी उपयोग =>
कर सकते हैं ताकि आप ऐसा कर सकें:
h = { C.new => 11 }
h = { 23 => 'pancakes house?' }
लेकिन आप ऐसा नहीं कर सकते:
h = { C.new: 11 }
h = { 23: 'pancakes house?' }
जावास्क्रिप्ट स्टाइल ( key: value
) केवल तभी उपयोगी है जब आपके सभी हैश कीज़ "सिंपल" सिंबल हैं (कमोबेश कुछ ऐसा जो मेल खाता हो /\A[a-z_]\w*\z/i
, AFAIK पार्सर इन कुंजियों के लिए अपने लेबल पैटर्न का उपयोग करता है)।
:$in
जब MongoDB का उपयोग कर ताकि आप हैश शैलियों मिश्रण अगर आप MongoDB का उपयोग पहुंच जाएंगे शैली प्रतीकों एक निष्पक्ष बिट दिखाई देते हैं। और, यदि आप कभी-कभी h[:k]
केवल पूरे हैश ( ) के बजाय हैश ( ) की विशिष्ट कुंजी के साथ काम करते हैं h = { ... }
, तो आपको अभी भी प्रतीकों के लिए कोलोन-प्रथम शैली का उपयोग करना होगा; आपको उन प्रतीकों के लिए अग्रणी-बृहदान्त्र शैली का उपयोग करना होगा जो आप हैश के बाहर उपयोग करते हैं। मैं लगातार रहना पसंद करता हूं इसलिए मैं जावास्क्रिप्ट शैली से बिल्कुल भी परेशान नहीं हूं।
रूबी 2.2 में जावास्क्रिप्ट-शैली के साथ कुछ समस्याएं तय की गई हैं। उदाहरण के लिए, यदि आपके पास ऐसे प्रतीक हैं जो मान्य लेबल नहीं हैं, तो आप अब उद्धरणों का उपयोग कर सकते हैं:
h = { 'where is': 'pancakes house?', '$set': { a: 11 } }
लेकिन आपको अभी भी हैशट्रॉक की जरूरत है अगर आपकी चाबियां प्रतीक नहीं हैं।
h[:s] = 42
उदाहरण इस प्रश्न से संबंधित है? मेरी राय में, जावास्क्रिप्ट शैली बनाम हैशट्रॉक शैली केवल हैश कुंजी / मूल्य जोड़ी परिभाषा के लिए प्रासंगिक है, और कुंजी द्वारा हैश तत्वों को संबोधित करने के लिए नहीं। इसलिए h[s:] = 42
उदाहरण भ्रामक प्रतीत होता है।
h[:s] = 42
नोटेशन का उपयोग करते हैं। कोई अन्य विकल्प नहीं है। जब आप कुंजी / मान जोड़े को परिभाषित करते हैं तो आपको { key: value }
जावास्क्रिप्ट शैली या { :key => value }
हैश्रोकेट शैली के विकल्प मिलते हैं। ध्यान केंद्रित करने के लिए संबोधन परिदृश्य अभी भी प्रासंगिक नहीं है।
key: "value"
रूबी 1.9 की सुविधा सुविधा है; जब तक आप जानते हैं कि आपका पर्यावरण इसका समर्थन करेगा, मुझे इसका उपयोग न करने का कोई कारण नहीं दिखता। रॉकेट की तुलना में कोलन टाइप करना बहुत आसान है, और मुझे लगता है कि यह बहुत साफ दिखता है। जैसा कि रूपांतरण करने के लिए एक रत्न होने के नाते, शायद नहीं, लेकिन यह आपके लिए एक आदर्श सीखने के अनुभव की तरह लगता है, अगर आपको फ़ाइल हेरफेर और नियमित अभिव्यक्ति नहीं पता है।
रूबी हैश-हैश-रॉकेट द्वारा सौंपे गए कुंजी-मूल्य जोड़े ( जैसे । 's' => x
) के लिए तार की सुविधा प्रदान कर सकते हैं, जबकि प्रतीकों ( जैसे key: "value"
या :key => "value"
) के माध्यम से कुंजी असाइनमेंट को तार के साथ नहीं सौंपा जा सकता है। यद्यपि हैश-रॉकेट हैश-टेबल के लिए स्वतंत्रता और कार्यक्षमता प्रदान करते हैं, विशेष रूप से स्ट्रिंग्स को कुंजी के रूप में अनुमति देते हैं , आवेदन प्रदर्शन धीमा हो सकता है अगर हैश-कुंजी के रूप में प्रतीकों के साथ हैश-टेबल का निर्माण किया जाना था। निम्नलिखित संसाधन हैश्रोक और प्रतीकों के बीच किसी भी अंतर को स्पष्ट करने में सक्षम हो सकते हैं:
key: value
JSON शैली कार्य, नए रूबी 1.9 हैश वाक्य रचना का एक हिस्सा हैं तो ध्यान रखें कि इस वाक्य रचना रूबी के पुराने संस्करणों के साथ काम नहीं करेंगे में भालू। इसके अलावा, चाबियाँ प्रतीक होने जा रहे हैं। यदि आप उन दो बाधाओं के साथ रह सकते हैं, तो पुराने हैश की तरह नए हैश काम करते हैं; उन्हें बदलने के लिए कोई कारण नहीं है (शैली के अलावा, शायद)।
करना ऐसा :key => value
ही है जैसा करना है key: value
, और वास्तव में सिर्फ एक सुविधा है। मैंने अन्य भाषाओं को नहीं देखा है जो उपयोग करते हैं =>
, लेकिन अन्य जैसे जावास्क्रिप्ट का उपयोग करते हैंkey: value
अपने हैश-समतुल्य डेटाटिप्स में ।
एक मणि के रूप में जिस तरह से आपने अपने हैश को लिखा है, उसे बदलने के लिए, मैं सिर्फ उसी तरह से चिपकूंगा जिस तरह से आप अपने वर्तमान प्रोजेक्ट के लिए कर रहे हैं।
* ध्यान दें कि key: value
कुंजी का उपयोग करना एक प्रतीक होगा, और foo
हैश में उस कुंजी पर संग्रहीत मूल्य तक पहुंचना होगा foo[:key]
।
=>
। मुझे लगता है कि रूबी, पर्ल से बहुत प्रेरित हो रही है, पर्ल से वाक्यविन्यास उधार लिया :)
h = { 'a.b': 'c' }
अब रूबी 2.2.0 के रूप में कानूनी है। देखें bugs.ruby-lang.org/issues/4276