2010-09-05 14 views
11

W obu Python i Java mamy import, aby wyeliminować powtarzanie w pełni kwalifikowanych nazw pakietów/modułów w całym kodzie. Czy istnieje odpowiednik w Perl/Moose? Myślę, że to naprawdę sprawiłoby, że Moose byłby milszy w użyciu, gdybyśmy nie musieli powtarzać MyApp::Model::Item. Zamiast tego chciałbym [somehow declare] MyApp::Model::Item; i później, po prostu odwołać się do Item. Mogę myśleć o tych wszystkich przypadkach, w których użytkowych są używane nazwy klas ...Skrócona nazwa w odniesieniu do nazw paczek Perla/Łosia?

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

Jeśli jeszcze nie ma czegoś takiego, jakikolwiek pomysł na to, jak mogę zacząć to wdrażać? Widzę, że trudno byłoby poradzić sobie z przypadkami, w których nazwa klasy jest używana jako ciąg znaków.

Odpowiedz

18

To wszystko działa z 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) { ... } 

To nie:

$Item::SOME_PACKAGE_GLOBAL_VAR 

Potrzeba czegoś takiego wydaje się być dość rzadkie, ale przypuszczam, że to może być wykonane do pracy z namespace::alias moduł.

+0

Fantastyczne! Dzięki za szybką odpowiedź! – PBJ

+0

i tak, rzadko potrzebuję dostępu do pakietu globalnego, więc mogę żyć z wypisywaniem nazwy w tych przypadkach. – PBJ

Powiązane problemy