11

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

そのようなものがまだない場合、これをきれいに実装し始める方法について何かアイデアはありますか?クラス名が文字列として使用されている場合を処理するのは難しいことがわかります。

4

1 に答える 1

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モジュールで動作させることができると思います。

于 2010-09-05T21:25:12.550 に答える