2010-09-05 12 views
11

Sia in Python che in Java abbiamo import per eliminare la ripetizione di nomi di pacchetti/moduli completi nel codice. Esiste un equivalente in Perl/Moose? Penso che renderebbe Moose davvero migliore da usare se non dovessimo ripetere MyApp::Model::Item. Invece, mi piacerebbe [somehow declare] MyApp::Model::Item; e più avanti, semplicemente riferimento a Item. Mi vengono in mente tutti questi casi d'uso in cui vengono utilizzati i nomi delle classi ...Sintesi per riferimento ai nomi dei pacchetti Perl/Moose?

  • extends 'Item';
  • with 'ItemRole';
  • Item->new(name => 'thing');
  • method foo(Item $xyz) { ... }, con MooseX::Method::Signatures
  • $var->isa('Item');
  • try { ... } catch (DatabaseError $e) { ... }, con TryCatch
  • $Item::SOME_PACKAGE_GLOBAL_VARIABLE

Se non c'è ancora nulla di simile, qualche idea su come potrei iniziare a implementarlo in modo pulito? Vedo che sarebbe difficile trattare i casi in cui il nome della classe è usato come una stringa.

risposta

18

Tutto questo funziona con 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) { ... } 

Questo non lo fa:

$Item::SOME_PACKAGE_GLOBAL_VAR 

Avendo bisogno di una cosa del genere sembra essere piuttosto raro, ma suppongo che potrebbe essere fatto per lavorare con il namespace::alias modulo.

+0

Fantastico! Grazie per la risposta rapida! – PBJ

+0

e sì, raramente ho bisogno di accedere a un pacchetto globale, quindi posso convivere con il nome in questi casi. – PBJ

Problemi correlati