Сокращение для ссылки на имена пакетов Perl / Moose? - PullRequest
11 голосов
/ 06 сентября 2010

В Python и Java у нас есть import, чтобы исключить повторение полностью определенных имен пакетов / модулей в коде. Есть ли какой-нибудь эквивалент в Perl / Moose? Я думаю, что было бы лучше использовать Moose, если бы нам не пришлось повторять MyApp::Model::Item. Вместо этого я хотел бы [somehow declare] MyApp::Model::Item;, а затем просто обратиться к Item. Я могу думать обо всех этих случаях использования имен классов ...

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

Если такой вещи еще нет, есть идеи о том, как я мог бы начать это реализовывать? Я вижу, что было бы сложно иметь дело со случаями, когда имя класса используется в качестве строки.

1 Ответ

18 голосов
/ 06 сентября 2010

Это все работает с 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.

...