मैं मूस पूरी तरह से निजी जिम्मेदार बताते हैं बनाने के लिए एक तरह से यह पता लगाने के लिए सक्षम नहीं किया गया। जब भी मैं एक विशेषता बनाने के लिए has 'name' => (...);
का उपयोग करता हूं, तो यह हमेशा कम से कम पढ़ने के लिए खुला रहता है। वस्तुओं के लिए मैं वास्तव में निजी होना चाहता हूं, मैं मूस पैकेज के अंदर मानक "मेरे" चर का उपयोग कर रहा हूं। एक त्वरित उदाहरण के लिए, निम्नलिखित मॉड्यूल "CountingObject.pm" लें।
package CountingObject;
use Moose;
my $cntr = 0;
sub add_one { $cntr++; }
sub get_count { return $cntr; }
1;
उस मॉड्यूल का उपयोग करने वाली स्क्रिप्ट्स में $ cntr चर के लिए कोई सीधी पहुंच नहीं है। उन्हें "add_one" और "get_count" विधियों का उपयोग करना चाहिए जो बाहरी दुनिया के लिए एक इंटरफ़ेस के रूप में कार्य करते हैं। उदाहरण के लिए:
#!/usr/bin/perl
### Call and create
use CountingObject;
my $co = CountingObject->new();
### This works: prints 0
printf("%s\n", $co->get_count());
### This works to update $cntr through the method
for (1..10) { $co->add_one(); }
### This works: prints 10
printf("%s\n", $co->get_count());
### Direct access won't work. These would fail:
# say $cntr;
# say $co->cntr;
मैं मूस के लिए नया हूँ, लेकिन जहाँ तक मैं बता सकता हूँ, इस दृष्टिकोण पूरी तरह से निजी चर प्रदान करता है।
स्रोत
2012-01-28 06:02:03
सवाल पढ़ने के साथ-साथ लेखन के बारे में पूछता है। जहां तक मैं कह सकता हूं, मूस (2.0401) के जनवरी 2012 संस्करण में, इस तरह से किए गए गुण अभी भी ऑब्जेक्ट के बाहर से पठनीय हैं। उदाहरण के लिए, 'मेरा $ एम = मूसऑब्जेक्ट-> नया(); $ m प्रिंट करें -> _ genetic_code; 'विशेषता में जो कुछ भी संग्रहीत है प्रिंट करेगा। मुझे नहीं पता कि उसके आस-पास कोई रास्ता है या नहीं। यह मुझे कभी परेशान नहीं करता है, लेकिन मुझे लगता है कि यह उल्लेखनीय है। –
@ एलनडब्ल्यू। स्मिथ बदल रहा है 'is =>' ro'' 'is =>' bare'' मदद 'है? उस स्थिति में, बाहर से '_genetic_code' तक पहुंचने का एकमात्र तरीका मूस के नीचे ही दिखना होगा और ऑब्जेक्ट हैश या कुछ देखें, क्योंकि मूस रीड एक्सेसर भी नहीं बनायेगा। क्या वो सही है? – sundar