मॉड्यूल समेत इसके उदाहरण विधियों को प्रतिलिपि बनाने के समान है।
आपके उदाहरण में, A
पर प्रतिलिपि बनाने के लिए कोई उदाहरण विधि नहीं है। model_method
वास्तव में Test
की सिंगलटन कक्षा का एक उदाहरण विधि है।
को देखते हुए:
module A
def method
end
end
यह:
module B
def method
end
end
जब आप इसे इस तरह लगता है कि यह सही समझ में आता है:
module B
include A
end
इस के अनुरूप है:
module B
class << self
include A
end
end
B.method
यहाँ, तरीकों B
मॉड्यूल के सिंगलटन वर्ग है, जो उन्हें B
की "वर्ग तरीकों" बनाता है पर कॉपी किया जा रहा है।
ध्यान दें कि यह बिल्कुल वही बात है के रूप में:
module B
extend A
end
हकीकत में, तरीकों कॉपी नहीं किया जा रहा है; कोई डुप्लिकेशन नहीं है। मॉड्यूल बस विधि लुकअप सूची में शामिल है।
module YourModule
module ClassMethods
def a_class_method
puts "I'm a class method"
end
end
def an_instance_method
puts "I'm an instance method"
end
def self.included(base)
base.extend ClassMethods
end
end
class Whatever
include YourModule
end
Whatever.a_class_method
# => I'm a class method
Whatever.new.an_instance_method
# => I'm an instance method
मूल रूप से यह अति-सरल करने के लिए, आप extend
वर्ग के तरीकों को जोड़ने के लिए:
स्रोत
2012-04-06 04:47:06
संभव डुप्लिकेट [? कि एक मॉड्यूल में एक वर्ग विधि को परिभाषित करना संभव है] (http://stackoverflow.com/questions/4699355/is-that-possible-to-define -ए-क्लास-विधि-इन-ए-मॉड्यूल) –