2013-03-13 16 views
13

Moduleरुबी में 'शामिल' और 'प्रीपेन्ड' के बीच क्या अंतर है?

मॉड्यूल # append_features (आधुनिक) → आधुनिक से => जब इस मॉड्यूल किसी अन्य रूप में शामिल किया गया है, रूबी append_features इस मॉड्यूल में कहता है, यह आधुनिक में प्राप्त मॉड्यूल गुजर। रूबी का डिफ़ॉल्ट कार्यान्वयन इस मॉड्यूल के स्थिरांक, विधियों और मॉड्यूल चर को संशोधित करने के लिए संशोधित करने के लिए है यदि यह मॉड्यूल पहले से ही मोड या उसके पूर्वजों में से जोड़ा नहीं गया है।

मॉड्यूल # prepend_features (mod) → mod => जब यह मॉड्यूल किसी अन्य में प्रीपेड किया जाता है, तो रूबी इस मॉड्यूल में प्रीपेन्ड_फेचर को कॉल करता है, इसे मॉड में प्राप्त मॉड्यूल पास कर देता है। रूबी का डिफ़ॉल्ट कार्यान्वयन ओवरले इस मॉड्यूल के स्थिरांक, विधियों और मॉड्यूल चर को संशोधित करने के लिए संशोधित करने के लिए है यदि यह मॉड्यूल पहले से ही मोड या उसके पूर्वजों में से जोड़ा नहीं गया है।

किसी को भी मेरी मदद कर सकते नीचे दिए गए प्रश्नों को समझने के लिए:

  • Module की और क्या सुविधाओं append और prepend उन डिफ़ॉल्ट को छोड़कर के रूप में परिभाषित कर रहे हैं?

  • वे कैसे काम करते हैं?

  • append_features और prepend_features का उपयोग कब करें?

  • उपरोक्त दो बोल्ड लाइनों के बीच क्या अंतर है?

उत्तर

19
  • मॉड्यूल किस सुविधाओं संलग्न और आगे जोड़ते के रूप में परिभाषित कर रहे हैं?

पाठ आप उद्धृत में विनिर्दिष्ट:

स्थिरांक, विधियों, और मॉड्यूल चर

  • कैसे वे कार्यात्मक भिन्न हैं?

उत्तीर्ण मॉड्यूल (कक्षा) में मिश्रित मॉड्यूल के दोनों तरीके जोड़ते हैं।अंतर है, इन तरीकों में से देखने के क्रम में होने की स्थिति में है कि लक्ष्य वर्ग उन्हें पहले से ही परिभाषित किया गया है:

include बर्ताव करता है के रूप में यदि लक्ष्य वर्ग मिश्रित में विरासत में मिला मॉड्यूल:

module FooBar 
    def say 
    puts "2 - Module" 
    end 
end 

class Foo 
    include FooBar 

    def say 
    puts "1 - Implementing Class" 
    super 
    end 
end 

Foo.new.say # => 
      # 1 - Implementing Class 
      # 2 - Module 

prepend तरीकों बनाता है मॉड्यूल में मिश्रित से "मजबूत" और उन्हें पहले निष्पादित: http://blog.crowdint.com/2012/11/05/3-killer-features-that-are-coming-on-ruby-2-0.html

:

module FooBar 
    def say 
    puts "2 - Module" 
    super 
    end 
end 

class Foo 
    prepend FooBar 

    def say 
    puts "1 - Implementing Class" 
    end 
end 

Foo.new.say # => 
      # 2 - Module 
      # 1 - Implementing Class 

उदाहरण कृपया यहां से बंद फट

  • append_features का उपयोग कब करें और जब prepend_features?

prepend का उपयोग करें जब आप विधि लुकअप श्रृंखला के अंत में लक्ष्य मॉड्यूल (कक्षा) के तरीकों को रखना चाहते हैं।

कुछ वास्तविक दुनिया उदाहरण खोज एसओ के लिए ruby, module और prepend द्वारा पाया जा सकता है:

(नोट: मैं केवल उल्लेख कर रहा हूँ विधियों, क्योंकि जब विरासत और मिश्रण में आता है तो वे तस्वीर के लिए सबसे आसान होते हैं , लेकिन यह अन्य सुविधाओं पर भी लागू होता है।)

+0

आपको + 1'। दस्तावेज़ के रूप में 'रुबी का डिफ़ॉल्ट कार्यान्वयन इस मॉड्यूल के स्थिरांक, विधियों और मॉड्यूल चर को जोड़ना है। यह अब ठीक है। उनको छोड़कर कोई और विशेषताएं? –

+0

आपने यहां दिया गया अच्छा स्पष्टीकरण। क्या आप मेरे अंतिम प्रश्न को देख सकते हैं और पहले प्रश्नों को अपडेट कर सकते हैं? –

+0

1) कुछ भी नहीं, (बस ?!) स्थिरांक, विधियों और मॉड्यूल युद्ध। 4) अनिवार्य रूप से 2 के समान है) और उदाहरण के माध्यम से समझाया गया है। –

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