Проблема с mixins в MooseX:: класс NonMoose

Я использовал AQtime, и он никогда не подводил меня. Я уверен, что существует пробная версия.

5
задан friedo 1 November 2009 в 03:29
поделиться

1 ответ

Я не нашел использовать базу 'CGI :: Application'; расширяет 'CGI :: Application'; до ужаса, потому что делает именно то, что вам нужно:

  • Во время компиляции @ISA содержит 'CGI :: Application' , что в точности удовлетворяет требованиям использования CGI :: Application :: Plugin :: *
  • Во время выполнения ваш класс является Moose потомком CGI :: Application , со всеми вытекающими из этого преимуществами (возможность спроектировать состав вашего класса с помощью мета-добра Муси). Только после того, как extends 'CGI :: Application' обнаруживается строка , выполняется любая работа (т.е. в вашем классе вызываются методы), которые зависят от работы, выполняемой оператором extends : что ваш класс происходит от Moose :: Object , и у вас установлен мета-класс.

Тем не менее, решение jrockway также должно работать:

BEGIN { extends 'CGI::Application' }

... где вы получаете все мета-классы Moosey Боже мой, только немного опережая график, когда он вам нужен, и не должно быть слишком раньше графика, при условии, что вы уже звонили , используйте Moose и используйте MooseX :: NonMoose для определения extends .

(Приложение: Теперь я ' m размышляя о дополнительных сложностях создания возможности принудительного синтаксического анализа ключевых слов во время компиляции, которые анализируются немедленно, как если бы они были заключены в блок BEGIN . например, что-то вроде того, что Moose.pm объявил , используйте время компиляции qw (extends) . Конечно, это было бы неплохим синтаксическим сахаром.)

5
ответ дан 14 December 2019 в 19:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: