2010-09-05 10 views
11

पाइथन और जावा दोनों में हमारे पास पूरे कोड में पूर्ण-योग्य पैकेज/मॉड्यूल नामों की पुनरावृत्ति को समाप्त करने के लिए import है। क्या पर्ल/मूस में कोई समकक्ष है? मुझे लगता है कि अगर हम MyApp::Model::Item दोहराने की ज़रूरत नहीं है तो यह वास्तव में मूस नाइसर का उपयोग करेगा। इसके बजाय, मैं [somehow declare] MyApp::Model::Item; और बाद में, Item का संदर्भ लेना चाहता हूं। मैं MooseX::Method::Signatures पर्ल/मूस पैकेज नामों का जिक्र करने के लिए शॉर्टंड?

  • $var->isa('Item');
  • try { ... } catch (DatabaseError $e) { ... } साथ, इन उपयोग-मामलों में जहां वर्ग के नाम का उपयोग किया जाता के सभी के बारे में सोच सकते हैं ...

    • extends 'Item';
    • with 'ItemRole';
    • Item->new(name => 'thing');
    • method foo(Item $xyz) { ... }, साथ TryCatch
    • $Item::SOME_PACKAGE_GLOBAL_VARIABLE

    यदि अभी तक ऐसी कोई बात नहीं है, तो इस बारे में कोई विचार है कि मैं इसे कैसे कार्यान्वित करना शुरू कर सकता हूं? मैं देख सकता हूं कि उन मामलों से निपटना मुश्किल होगा जहां वर्ग नाम स्ट्रिंग के रूप में उपयोग किया जाता है।

  • उत्तर

    18

    यह aliased

    use aliased 'MyApp::Model::Item'; 
    use aliased 'MyApp::ItemRole'; 
    use aliased 'MyApp::Exception::DatabaseError'; 
    
    extends Item; 
    with ItemRole; 
    Item->new(name => 'thing'); 
    method foo (Item $xyz) { ... } 
    $var->isa(Item); 
    try { ... } catch(DatabaseError $e) { ... } 
    

    के साथ सभी काम करता है यह नहीं करता है:

    $Item::SOME_PACKAGE_GLOBAL_VAR 
    

    ऐसा ही कुछ की जरूरत काफी दुर्लभ हो रहा है, लेकिन मैं इसे namespace::alias के साथ काम करने के लिए किया जा सकता है लगता है मॉड्यूल।

    +0

    शानदार! त्वरित उत्तर के लिए धन्यवाद! – PBJ

    +0

    और हाँ, मुझे शायद ही कभी एक पैकेज वैश्विक तक पहुंचने की ज़रूरत है, इसलिए मैं उन मामलों में नाम से वर्तनी के साथ रह सकता हूं। – PBJ