2012-04-24 6 views
5

वर्तमान में मेरे पास एक सत्र चर है जो एक ही मान देता है जब मैं session["test"] या session[:test] दोनों का उपयोग करता हूं। क्या ये दोनों एक ही हैं? क्या एक दूसरे के ऊपर उपयोग करना बेहतर है?क्या मुझे रूबी पर रूबी में सत्र कुंजी के लिए उद्धरण या कॉलन का उपयोग करना चाहिए?

धन्यवाद

उत्तर

4

एक मानक रूबी हैश में वे एक ही (string vs symbol)

हालांकि

, रेल SessionHash उपवर्ग कुंजी पर to_s कॉल उन्हें भंडारण से पहले नहीं कर रहे हैं, इसलिए सभी चाबियाँ तार (भले ही आप एक निर्दिष्ट के रूप में जमा हो जाती है प्रतीक):

class SessionHash < Hash 

    def [](key) 
    load_for_read! 
    super(key.to_s) 
    end 

    def []=(key, value) 
    load_for_write! 
    super(key.to_s, value) 
    end 

क्यों session[:test] और session["test"] रेल में समान मान प्रदान करेंगे है यही कारण है कि।

+1

मूल समस्या यह है कि आप रंगीन तारों को प्रतीकों में परिवर्तित नहीं करना चाहते हैं, क्योंकि प्रतीकों को कचरा-संग्रह नहीं मिलता है। – Reactormonk

+1

एक बात मैंने आज देखा। मेरे सत्र मान तारों द्वारा प्रतीकों तक पहुंच योग्य नहीं हैं। जबकि पैरा भी प्रतीकों के साथ काम कर रहे हैं। मैं रूबी 1.9.2 और रेल 3.2.13 –

+0

का उपयोग कर रहा हूं 'स्ट्रिंग बनाम प्रतीक' लिंक टूटा हुआ है: / – brandaemon

0

नहीं वे एक ही एक नहीं हैं एक स्ट्रिंग अन्य प्रतीक

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

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

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

यदि आप और अधिक पढ़ना चाहते हैं तो एक लंबा ब्लॉग पोस्ट just here है जो रूबी प्रतीकों को अच्छी तरह से समझाता है। कहने का पर्याप्त कारण वे एक ऑप्टोमाइज़ेशन हैं।

0

नहीं, वे ठीक वही नहीं हैं। वे एक ही चीज़ को पूरा करने के दो तरीके हैं।

सामान्य रूप से, रूबी में प्रतीकों का एक बड़ा उपयोग कुंजी के रूप में होता है। प्रतीक :these_things हैं। हैश कुंजी उनके लिए एक सामान्य उपयोग हैं ...

{ 
    :name => 'Mary', 
    :rank => 'Captain' 
} 

सत्र कुंजी आमतौर पर प्रतीक भी होते हैं।

स्ट्रिंग्स का उपयोग करने से इसके बजाय कुछ भी नुकसान नहीं पहुंचाएगा, लेकिन प्रतीक अधिक विशिष्ट हैं।

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

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