यहाँ सवाल के साथ साथ जाने के लिए एक कोड का टुकड़ा है। कक्षा परिभाषा में "निजी" का उपयोग कक्षा विधियों पर लागू नहीं होता है। आपको निम्नलिखित उदाहरणों में "private_class_method" का उपयोग करने की आवश्यकता है।
class Foo
def self.private_bar
# Complex logic goes here
puts "hi"
end
private_class_method :private_bar
class <<self
private
def another_private_bar
puts "bar"
end
end
public
def instance_bar
self.class.private_bar
end
def instance_bar2
self.class.another_private_bar
end
end
f=Foo.new
f=instance_bar # NoMethodError: private method `private_bar' called for Foo:Class
f=instance_bar2 # NoMethodError: private method `another_private_bar' called for Foo:Class
मुझे इस के आसपास जाने का कोई तरीका नहीं दिख रहा है। दस्तावेज़ीकरण कहता है कि आप एक निजी विधि प्राप्त नहीं कर सकते हैं। इसके अलावा आप एक ही उदाहरण से केवल एक निजी विधि तक पहुंच सकते हैं। कक्षा फू फू के दिए गए उदाहरण की तुलना में एक अलग वस्तु है।
मेरा उत्तर अंतिम के रूप में न लें। मैं निश्चित रूप से एक विशेषज्ञ नहीं हूं, लेकिन मैं एक कोड स्निपेट प्रदान करना चाहता था ताकि अन्य जो उत्तर देने का प्रयास करेंगे, वे उचित रूप से निजी वर्ग के तरीके होंगे।
स्रोत
2008-08-21 18:42:39
पहले उदाहरण के लिए त्रुटि प्राप्त करना: '1.9।3p327: 078> f = Foo.new => # <फू: 0x0000000293baa0> 1.9.3p327: 079> f.class.send: calling_private_method NoMethodError: अपरिभाषित विधि \ 'calling_private_method 'फू के लिए: कक्षा से (आईआरबी) : 79 ~/.rvm/rubies/ruby-1.9.3-p327/bin/irb: 16: \ ' '' –
TrinitronX
हाँ, यह काम नहीं करता है (या शायद अब काम नहीं करता है)। –
एक टाइपो - मेरे कोड @JacobCrofts – metakungfu