2009-05-16 7 views
6

में अनियंत्रित निरंतर MyClass (NameError) मेरे पास एक मॉड्यूल शिश (जो एक अमूर्त वर्ग की तरह कार्य करता है) और विज़िटर क्लास केवल_ऑनियंस है।रुबी

मैं मॉड्यूल में केवल_ऑनियंस को तुरंत चालू करना चाहता हूं ताकि शिश का विस्तार करने वाले सभी वर्ग वस्तु का उपयोग कर सकते हैं अगर उनके पास केवल_ऑनियंस हैं।

module Shish 
    only_onions_class = Only_Onions.new 
end 

class Only_Onions 
    def for_skewer 
     return true 
    end 
end 


class Skewer 
    include Shish 

    def only_onions 
     return only_onions_class.for_skewer 
    end 

    def veg? 
     return true 
    end 
end 

लेकिन मैं एक त्रुटि "अप्रारंभीकृत निरंतर शीशराम :: Only_Onions (NameError) मिलता है। इसका क्या मतलब है?

उत्तर

6

घोषणा के क्रम में एक प्रभाव पड़ता है। शीशराम नहीं करता है आपके कोड में केवल_ऑनियंस के बारे में नहीं पता। अगर आप इसे बदलते हैं, तो मॉड्यूल को परिभाषित करते समय केवल_ऑनियंस पहले ही घोषित कर दिए जाते हैं:

class Only_Onions 
    def for_skewer 
     return true 
    end 
end 

module Shish 
    only_onions_class = Only_Onions.new 
end 

class Skewer 
    include Shish 

    def only_onions 
     return only_onions_class.for_skewer 
    end 

    def veg? 
     return true 
    end 
end 
+0

इसने मूल समस्या हल की। लेकिन मुझे लगता है कि only_onions_class को क्लास वैरिएबल होना चाहिए। क्या मैं सही हूँ? क्या मैं अभी भी उपर्युक्त कोड सही तरीके से काम कर सकता हूं? – unj2

1

कोशिश

::Only_Onions 
+1

मैंने सोचा था कि :: केवल तब होता है जब आपके पास एक मॉड्यूल नाम होता है और नामस्थान नामित करने के बाद कक्षा का नाम होता है? जब आप इसका उपयोग मॉड्यूल के बिना करते हैं तो यह क्या करता है? मैं इससे परिचित नहीं हूँ। –

+1

एक खाली नामस्थान वैश्विक नामस्थान इंगित करता है। तो ऑब्जेक्ट "ऑब्जेक्ट" और "ऑब्जेक्ट" दोनों है। – Chuck