module_function
दिए गए इंस्टेंस विधियों को निजी बनाता है, फिर डुप्लिकेट करता है और उन्हें मॉड्यूल के मेटाक्लास को सार्वजनिक तरीकों के रूप में रखता है। extend self
मॉड्यूल के सिंगलटन में सभी इंस्टेंस विधियों को जोड़ता है, जिससे उनकी दृश्यता अपरिवर्तित हो जाती है।
module M
extend self
def a; end
private
def b; end
end
module N
def c; end
private
def d; end
module_function :c, :d
end
class O
include M
include N
end
M.a
M.b # NoMethodError: private method `b' called for M:Module
N.c
N.d
O.new.a
O.new.b # NoMethodError: private method `b' called for O
O.new.c # NoMethodError: private method `c' called for O
O.new.d # NoMethodError: private method `d' called for O
हाँ module_function वर्ग तरीकों सार्वजनिक हैं, लेकिन उदाहरण के तरीकों निजी – horseyguy
module_function "नाम तरीकों के लिए मॉड्यूल कार्यों बनाता है। इन कार्यों एक रिसीवर के रूप में मॉड्यूल के साथ कहा जा सकता है, और यह भी कक्षाओं के लिए उदाहरण के तरीके के रूप में उपलब्ध हो जाते हैं कि मॉड्यूल में मिश्रण। मॉड्यूल फ़ंक्शंस मूल की प्रतियां हैं, और इसलिए स्वतंत्र रूप से बदला जा सकता है। उदाहरण-विधि संस्करण निजी बनाये जाते हैं। यदि कोई तर्क नहीं होता है, तो बाद में परिभाषित विधियां मॉड्यूल फ़ंक्शन बन जाती हैं। " स्रोत: http://www.ruby-doc.org/docs/ProgrammingRuby/html/ref_c_module.html#Module.module_function – mysmallidea