Как вы используете MooseX :: Declare с подклассом Moose? - PullRequest
3 голосов
/ 24 марта 2011

Допустим, вы сделали что-то вроде расширенного рецепта 3 или 4 . Таким образом, у вас есть некоторый класс, такой как MyApp :: UseMyBase, который вы можете использовать вместо 'use Moose;' в вашем обычном коде, использующем Moose. Но как вы используете MyApp :: UseMyBase при использовании MooseX :: Declare?

Я вижу MooseX :: Declare :: Syntax :: MooseSetup :: import_symbols_from (), который может быть многообещающим, но не имеет представления о том, как изменить его возвращаемое значение и имеет MooseX :: Declare для использования и импорта из MyApp :: UseMyBase вместо лося.

1 Ответ

3 голосов
/ 24 марта 2011

Вам придется создать подкласс MooseX::Declare::Syntax::Keyword::Class и, возможно, также MooseX::Declare::Syntax::Keyword::Role, если вы этого хотите, и настроить import_symbols_from там.

Затем вы сами расширяете MooseX::Declare для предоставления ваших измененных ключевых слов. Для этого вам нужно настроить метод keywords. Вы можете либо заменить возвращенные им экземпляры ClassKeyword и RoleKeyword на экземпляры ваших настроенных ключевых слов, либо просто настроить новые ключевые слова под другим идентификатором, в зависимости от того, хотите ли вы

use MyMooseX::Declare;
class Foo { ... } # the modified class keyword

или

use MyMooseX::Declare;
class   Foo { ... } # the default class keyword
myclass Bar { ... } # the modified class keyword

CatalystX :: Declare содержит предшествующий уровень техники в этом, но это также намного сложнее, чем вы просите. Я не знаю более простого примера этого, но я хотел бы включить улучшенную документацию по этому вопросу, если вы хотите поделиться своим решением с остальным миром

...