मेरे पास एक मॉड्यूल है जो लॉग पर लिखता है। प्रत्येक संदेश में मैं इस संदेश को लॉग करने वाले वर्ग का नाम रखना चाहता हूं।self.class.name एक मिश्रण-मॉड्यूल में
मॉड्यूल include
या extend
का उपयोग कर मिश्रित किया जा सकता है। मुझे प्रत्येक मामले में सही वर्ग के नाम रखने के लिए मेरे लॉग की आवश्यकता है।
आसुत कोड:
module M
def f
self.class.name
end
end
class C
extend M
include M
end
p C.f # => "Class"
p C.new.f # => "C"
जैसा कि आप देख, पहली कॉल गलत तरीके से "Class"
प्रिंट करता है। मैं इसे "C"
भी चाहता हूं।
इसे कैसे पूरा करें?
यह सब पर काम नहीं करता है अगर आप ', m' का विस्तार हालांकि। –
आपको विस्तार करने की ज़रूरत नहीं है। क्लास विधि विधि मॉड्यूल के अंदर रखे गए विधियों को आप जिस तरीके से बदलना चाहते हैं। :) – Kaeros
क्या होगा यदि मैं सिर्फ विस्तार करना चाहता हूं, और इसमें शामिल नहीं हूं? तब मुझे किसी भी अच्छे कारण के लिए 'एम :: क्लासमेड्स का विस्तार' करना होगा। व्यक्तिगत रूप से, मैं वास्तव में पूरे विस्तार-पर-समावेश पैटर्न को वास्तव में नापसंद करता हूं। –