2010-10-02 10 views
14

मुझे जावा में काम करने के लिए उपयोग किया जाता है, तो शायद यह प्रश्न जावा-उन्मुख पर्ल प्रश्न है ... वैसे भी, मैंने Moose का उपयोग कर Person पैकेज बनाया है।मुझे पर्ल में 'स्थैतिक' सबराउटिन को कैसे परिभाषित करना चाहिए?

अब, मैं कुछ subroutines जो "स्थैतिक" जोड़ना चाहता हूं, यानी, वे एक विशिष्ट Person का संदर्भ नहीं लेते हैं, लेकिन Person पैकेज से अभी भी निकटता से संबंधित हैं। उदाहरण के लिए, sub sort_personsPerson ऑब्जेक्ट्स की एक सरणी प्राप्त करता है।

जावा में, मैं बस static जैसे कार्यों को घोषित करता हूं। लेकिन पर्ल में ... ऐसा करने का आम तरीका क्या है?

पेज। मुझे लगता है कि मैं जो संदर्भ दे रहा हूं उसके लिए पर्लिश शब्दावली "कक्षा विधियों" है।

+0

@FM कि के बिल्कुल सोचा था की मेरी लाइन थी। यूजीन y पर मेरी टिप्पणी देखें :) –

उत्तर

16

पर्ल में एक स्थिर विधि जैसी कोई चीज़ नहीं है। पूरे वर्ग पर लागू होने वाले तरीके पारंपरिक रूप से कक्षा विधियों कहा जाता है। ये केवल उदाहरण विधियों से उनके पहले तर्क के प्रकार से भिन्न हैं (जो एक पैकेज नाम है, वस्तु नहीं है)। अधिकांश पर्ल कक्षाओं में new() जैसे कन्स्ट्रक्टर विधियां, वर्ग विधियों का एक आम उदाहरण हैं।

यदि आप चाहते हैं एक विशेष विधि, एक वर्ग विधि केवल के रूप में लागू किया जा करने के लिए कुछ इस तरह करते हैं:

sub class_method { 
    my ($class, @args) = @_; 
    die "class method invoked on object" if ref $class; 
    # your code   
} 
+0

+1 मैंने इसे अपने बारे में "पाया" :) मुझे लगता है कि सबसे आम उदाहरण 'नया()' है जिसे मैंने 'स्थैतिक' के संदर्भ में कभी नहीं सोचा लेकिन यह स्पष्ट रूप से है। –

+0

जब तक किसी ऑब्जेक्ट पर क्लास विधि को कॉल करने के लिए कोई कारण नहीं है, तो मैं केवल 'ref $ self' की जांच छोड़ दूंगा। – cjm

+2

ऑब्जेक्ट विधियों से कक्षा विधियों को अलग करने में सहायता के लिए, मैं '$ class' का उपयोग उस चर के रूप में करना चाहता हूं जो चालक को रखता है। तो 'sub class_method {मेरा ($ वर्ग, @params) = @_; # ब्लाह} ' – daotoad

संबंधित मुद्दे