उदाहरण के तरीकों को एक वर्ग परिभाषा ब्लॉक के अंदर परिभाषित किया गया है। वर्ग विधियों को एक वर्ग के सिंगलटन वर्ग पर सिंगलटन विधियों के रूप में परिभाषित किया जाता है, जिसे अनौपचारिक रूप से "मेटाक्लास" या "ईगेंसेलस" के रूप में भी जाना जाता है। private
एक कीवर्ड नहीं है, लेकिन एक विधि ( मॉड्यूल # निजी ) है।
यह विधि है self#private
/ A#private
जो "टॉगल" करने के लिए सभी आगामी उदाहरण विधि परिभाषाओं के लिए निजी पहुँच पर जब तक टॉगल नहीं किया जाता है:
class A
private
def instance_method_1; end
def instance_method_2; end
# .. and so forth
end
जैसा कि पहले उल्लेख किया गया है, वर्ग विधियाँ वास्तव में एकल वर्ग पर परिभाषित एकल विधि हैं।
def A.class_method; end
या A के अनाम, एकल वर्ग की परिभाषा बॉडी को खोलने के लिए एक विशेष सिंटैक्स का उपयोग करना:
class << A
def class_method; end
end
"मैसेज प्राइवेट" का रिसीवर - सेल्फ इनसाइड class A
क्लास ऑब्जेक्ट है। class << A
ब्लॉक के अंदर सेल्फ एक और ऑब्जेक्ट है, सिंगलटन क्लास।
निम्न उदाहरण वास्तविकता में कॉल करने के लिए दो अलग- अलग प्राप्तकर्ता या लक्ष्य का उपयोग करते हुए, दो अलग-अलग तरीकों को निजी कहा जाता है । पहले भाग में, हम एक निजी उदाहरण विधि ("क्लास ए पर") को परिभाषित करते हैं, बाद में हम एक निजी क्लास पद्धति को परिभाषित करते हैं (वास्तव में ए के सिंगलटन क्लास ऑब्जेक्ट पर एक सिंगलटन विधि है)।
class A
# self is A and private call "A.private()"
private def instance_method; end
class << self
# self is A's singleton class and private call "A.singleton_class.private()"
private def class_method; end
end
end
अब, इस उदाहरण को थोड़ा फिर से लिखें:
class A
private
def self.class_method; end
end
क्या आप इस गलती को देख सकते हैं [कि रूबी भाषा के डिजाइनर]? आप ए के सभी आगामी उदाहरण तरीकों के लिए निजी पहुंच पर टॉगल करते हैं, लेकिन एक अलग वर्ग, सिंगलटन वर्ग पर एक सिंगलटन विधि घोषित करने के लिए आगे बढ़ें।