2009-06-08 7 views
26

मॉड्यूल या लाइब्रेरी के अंदर "SELF" के उपयोग के संबंध में त्वरित प्रश्न। असल में "एसईएलएफ" का दायरा/संदर्भ क्या है क्योंकि यह मॉड्यूल या लाइब्रेरी से संबंधित है और इसका सही तरीके से उपयोग कैसे किया जाता है? मैं किस बारे में बात कर रहा हूं उसके उदाहरण के लिए, "प्रमाणीकृत सिस्टम" मॉड्यूल को "restful_authentication" के साथ स्थापित करें।(रूबी, रेल) ​​मॉड्यूल और पुस्तकालयों में एसईएलएफ का संदर्भ ...?

नोट: मुझे पता है कि 'स्वयं' अन्य भाषाओं में 'इस' के समान है और कैसे एक वर्ग/वस्तु पर 'आत्म' संचालित होता है, हालांकि मॉड्यूल/लाइब्रेरी के संदर्भ में 'स्वयं' । तो फिर मॉड्यूल की तरह कुछ के अंदर स्वयं का संदर्भ क्या है जहां कोई वर्ग नहीं है?

उत्तर

44

जोड़ रहा है एक मॉड्यूल में:

जब आप एक उदाहरण विधि में self देखते हैं, इसके बारे में उदाहरण के लिए संदर्भित करता है कक्षा जिसमें मॉड्यूल शामिल है।

जब आप एक उदाहरण विधि के बाहर self देखते हैं, तो यह मॉड्यूल को संदर्भित करता है।

module Foo 
    def a 
    puts "a: I am a #{self.class.name}" 
    end 

    def Foo.b 
    puts "b: I am a #{self.class.name}" 
    end 

    def self.c 
    puts "c: I am a #{self.class.name}" 
    end 
end 

class Bar 
    include Foo 

    def try_it 
    a 
    Foo.b # Bar.b undefined 
    Foo.C# Bar.c undefined 
    end 
end 

Bar.new.try_it 
#>> a: I am a Bar 
#>> b: I am a Module 
#>> c: I am a Module 
+1

सटीक रूप से। सब कुछ रूबी में एक वस्तु है। कोई जगह कोड निष्पादित नहीं किया जा सकता है जहां स्वयं नहीं है। – Chuck

+0

समझा, तो फिर मॉड्यूल में स्वयं को कॉल करने का दायरा/उद्देश्य क्या है? –

+0

हाय सब, अभी भी एक स्पष्ट उत्तर की तलाश है। मुझे एहसास है कि एसईएलएफ़ * क्या कर सकता है। मुझे यह जानने की ज़रूरत है कि मॉड्यूल के एक समारोह में यह * क्या करता है? मुझे लगता है कि कुछ प्रकार का चर वैश्विक स्तर पर सेट है, लेकिन मुझे यकीन नहीं है कि यह मामला है या नहीं। क्या कोई पुष्टि/प्रबुद्ध कर सकता है? –

0

एक संक्षिप्त सारांश के लिए ... http://paulbarry.com/articles/2008/04/17/the-rules-of-ruby-self

स्वयं भी (सी #/जावा लोगों के लिए या स्थिर विधि) वर्ग के तरीकों को जोड़ने के लिए प्रयोग किया जाता है। निम्नलिखित स्निपेट एक विधि वर्तमान वर्ग वस्तु (स्थिर) को do_something कहा जाता है ...

class MyClass 
    def self.do_something # class method 
     # something 
    end 
    def do_something_else # instance method 
    end 
end 
संबंधित मुद्दे