2013-08-13 4 views
7

रूबी में एक कोलन जोड़ने और प्रीपेड करने के बीच क्या अंतर है?प्रीपेन्ड और कोलन के संलग्न करने के बीच अंतर (: आइटम बनाम आइटम :)

उदाहरण:

#In rails you often have things like this: 
has_many :models, dependent: :destroy 

क्यों करता dependent: एक साथ जोड़ दिया बृहदान्त्र है, लेकिन :models और :destroy एक प्रीपेंड बृहदान्त्र है? अंतर क्या है?

+0

संभावित डुप्लिकेट [क्या \ ': key =>" value "\' और \ 'कुंजी:" मान "\" हैश नोटेशन के बीच कोई अंतर है?] (Http://stackoverflow.com/questions/8675206/नहीं है-किसी भी-अंतर-बीच-की-वैल्यू और मुख्य मान-हैश नहीं) –

उत्तर

9

यह है कि हैश पर चाबियाँ हैं प्रतीकों को परिभाषित करने के लिए रूबी 1.9 में एक नया वाक्य रचना है एक ही है।

दोनों : को symbol को परिभाषित और संलग्न किया गया है, लेकिन बाद वाला हैश के प्रारंभ के दौरान ही मान्य है।

आप एक हल्के स्ट्रिंग स्थिर के रूप में symbol के बारे में सोच सकते हैं।

hash = { 
    :key => "value", 
    :another_key => 4 
} 

वे 1.9 में यह सरल बनाया:

यह

:dependent => :destroy 

पहले 1.9 के बराबर है, हैश एक वाक्य रचना से थोड़ा अधिक वर्बोज़ और अजीब टाइप करने के लिए है कि के साथ परिभाषित किया गया

hash = { 
    key: "value", 
    another_key: 4 
} 

यदि आप कभी भी मॉड्यूल लिख रहे हैं तो आप 1.9 से पहले रुबी पर उपयोग करना चाहते हैं, सुनिश्चित करें कि आप हमें ई पुराने वाक्यविन्यास।

4

दोनों मामलों में कोलन एक प्रतीक इंगित करता है, लेकिन यह जोड़ना शॉर्टेंड है जब प्रतीक हैश में एक कुंजी है।

dependent: :destroy 

रूप

:dependent => :destroy 
2

"संलग्न" कोलन 1.9 में हैश प्रदर्शित करने का नया आम तरीका है।

dependent: :destroy रूप :dependent => :destroy

दूसरी ओर एक ही बात है, एक "prepended" पेट रूबी में एक प्रतीक डेटा प्रकार इंगित करता है।

5

के बाद रूबी आप कोष्ठक () छोड़ और कुछ मामलों में घुंघराले {} धनुकोष्ठक यह बहुत स्पष्ट नहीं हो सकता है, लेकिन इसके बाद के संस्करण कोड वास्तव में इस तरह देख रहा है की अनुमति देता है:

has_many(:models, { dependent: :destroy })

अब, इसका मतलब है कि has_many दो तर्क लेते हैं, एक प्रतीक :, एक अपरिवर्तनीय स्ट्रिंग यदि आप करेंगे, और एक हैश जहां dependent कुंजी है और destroy मान है; शायद :dependent => destroy के रूप में भी देखा जा सकता है।

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