रूबी में निजी तरीके:
यदि रूबी में कोई विधि निजी है, तो उसे स्पष्ट रिसीवर (ऑब्जेक्ट) द्वारा नहीं बुलाया जा सकता है। इसे केवल अंतर्निहित रूप से कहा जा सकता है। इसे उस वर्ग द्वारा अंतर्निहित रूप से कहा जा सकता है जिसमें इसे इस वर्ग के उपवर्गों द्वारा वर्णित किया गया है।
निम्नलिखित उदाहरण इसे बेहतर रूप में चित्रित करेंगे:
1) निजी विधि class_name के साथ एक पशु वर्ग
class Animal
def intro_animal
class_name
end
private
def class_name
"I am a #{self.class}"
end
end
इस मामले में:
n = Animal.new
n.intro_animal #=>I am a Animal
n.class_name #=>error: private method `class_name' called
2) एम्फ़िबियन नामक जानवर का एक उपवर्ग:
class Amphibian < Animal
def intro_amphibian
class_name
end
end
इस मामले में:
n= Amphibian.new
n.intro_amphibian #=>I am a Amphibian
n.class_name #=>error: private method `class_name' called
जैसा कि आप देख सकते हैं, निजी तरीकों को केवल अंतर्निहित रूप से कहा जा सकता है। उन्हें स्पष्ट रिसीवर द्वारा नहीं बुलाया जा सकता है। इसी कारण से, परिभाषित करने वाले वर्ग के पदानुक्रम के बाहर निजी तरीकों को नहीं बुलाया जा सकता है।
रूबी में संरक्षित तरीके:
यदि एक विधि रूबी में संरक्षित है, तो इसे परिभाषित करने वाले वर्ग और इसके उपवर्ग दोनों द्वारा निहित कहा जा सकता है। इसके अतिरिक्त उन्हें एक स्पष्ट रिसीवर द्वारा भी बुलाया जा सकता है जब तक कि रिसीवर स्वयं या उसी वर्ग का है जो स्वयं के रूप में है:
1) संरक्षित विधि के साथ एक पशु वर्ग protect_me
class Animal
def animal_call
protect_me
end
protected
def protect_me
p "protect_me called from #{self.class}"
end
end
इस मामले में:
n= Animal.new
n.animal_call #=> protect_me called from Animal
n.protect_me #=>error: protected method `protect_me' called
2) एक स्तनपायी वर्ग जो पशु वर्ग से विरासत में मिला है
class Mammal < Animal
def mammal_call
protect_me
end
end
इस मामले में
n= Mammal.new
n.mammal_call #=> protect_me called from Mammal
3) पशु वर्ग से विरासत में मिला एक उभयचर वर्ग (स्तनधारी वर्ग के समान)
class Amphibian < Animal
def amphi_call
Mammal.new.protect_me #Receiver same as self
self.protect_me #Receiver is self
end
end
इस मामले में
n= Amphibian.new
n.amphi_call #=> protect_me called from Mammal
#=> protect_me called from Amphibian
४) ट्री नामक एक वर्ग
class Tree
def tree_call
Mammal.new.protect_me #Receiver is not same as self
end
end
इस मामले में:
n= Tree.new
n.tree_call #=>error: protected method `protect_me' called for #<Mammal:0x13410c0>
Object
को हर दूसरे उदाहरण के निजी तरीकों को कॉल करने की अनुमति दी गई हैObject
, तो ऐसा कहना संभव होगा5.puts("hello world")
।