शामिल है मेरे पास एक मिश्रण है जिसके लिए मैं इसे शामिल करने वाले सभी वर्गों की एक सूची प्राप्त करना चाहता हूं।कक्षाओं की एक सूची प्राप्त करना जिसमें मॉड्यूल
module MyModule
def self.included(base)
@classes ||= []
@classes << base.name
end
def self.classes
@classes
end
end
class MyClass
include MyModule
end
यह बहुत अच्छी तरह से काम करता है::
> MyModule.classes #=> nil
> MyClass.new #=> #<MyClass ...>
> MyModule.classes #=> ["MyClass"]
अब, मैं एक अलग मॉड्यूल है कि मेरे अन्य में शामिल किया जा सकता में इस हिस्से बाहर निकालने के लिए चाहते हैं mixin मॉड्यूल में, मैं निम्नलिखित किया mixins। तो, मैं निम्नलिखित के साथ आया था:
module ListIncludedClasses
def self.included(base)
p "...adding #{base.name} to #{self.name}.classes"
@classes ||= []
@classes << base.name
base.extend(ClassMethods)
end
def self.classes
@classes
end
module ClassMethods
def included(module_base)
p "...adding #{module_base.name} to #{self.name}.classes"
@module_classes ||= []
@module_classes << module_base.name
super(module_base)
end
def classes
@module_classes
end
end
end
module MyModule
include ListIncludedClasses
end
यह, हालांकि काम नहीं करता क्योंकि #included (module_base) विधि ListIncludedClasses से MyModule में जोड़ा जा रहा कभी नहीं रन हो रही है। दिलचस्प है, यह सफलतापूर्वक MyClodule में #classes जोड़ता है।
> MyModule.classes #=>
"...adding Rateable to ListIncludedClasses.classes"
=> nil
> ListIncludedClasses #=> ["MyModule"]
> MyClass.new #=> #<MyClass ...>
# ^^ THIS SHOULD BE ADDING MyClass TO MyModule.classes ^^
> MyModule.classes #=> nil
मुझे क्या याद आ रही है?
यह इंगित करना न भूलें कि मैंने आपके प्रश्न का उत्तर दिया है! – Tom
क्या आपने यह कोशिश की है: http://stackoverflow.com/questions/3527445/when-are-modules-cluded-in-a-ruby-class-running-in-rails – rickypai