2010-09-05 16 views
11

Python ve Java'da, kod boyunca tam nitelikli paket/modül adlarının tekrarını ortadan kaldırmak için import'a sahibiz. Perl/Moose'da herhangi bir eşdeğer var mı? MyApp::Model::Item'u tekrarlamak zorunda kalmazsak Moose'u daha güzel kullanacağını düşünüyorum. Bunun yerine, [somehow declare] MyApp::Model::Item; ve daha sonrası için Item'a başvurmak istiyorum. Birlikte, MooseX::Method::Signatures Perl/Moose paket isimlerine başvurmak için kestirme mi?

  • $var->isa('Item');
  • try { ... } catch (DatabaseError $e) { ... } ile, ... sınıf isimleri kullanılan bu kullanım senaryoları tüm

    • Item->new(name => 'thing');
    • method foo(Item $xyz) { ... }extends 'Item';
    • with 'ItemRole'; düşünebiliriz TryCatch
    • $Item::SOME_PACKAGE_GLOBAL_VARIABLE

    Henüz böyle bir şey yoksa, bunu nasıl temizlemeye başlayabileceğime dair bir fikrim var mı? Sınıf isminin bir dize olarak kullanıldığı durumlarla başa çıkmanın zor olacağını görebiliyorum. Böyle bir şey ihtiyacı

    $Item::SOME_PACKAGE_GLOBAL_VAR 
    

    oldukça nadir gibi görünüyor, ama namespace::alias ile çalışmak için yapılmış olabilir varsayalım: 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) { ... } 
    

    ile

  • cevap

    18

    Bu tüm inşaat Bu değil modülü.

    +0

    Fantastik! Hızlı cevap için teşekkürler! – PBJ

    +0

    ve evet, nadiren küresel bir pakete erişmem gerekiyor, bu yüzden bu durumlarda adı yazımla yaşayabilirim. – PBJ