Spec-Zone .ru
спецификации, руководства, описания, API
Spec-Zone .ru
спецификации, руководства, описания, API
Библиотека разработчика Mac Разработчик
Поиск

 

Эта страница руководства для  версии 10.9 Mac OS X

Если Вы выполняете различную версию  Mac OS X, просматриваете документацию локально:

Читать страницы руководства

Страницы руководства предназначаются как справочник для людей, уже понимающих технологию.

  • Чтобы изучить, как руководство организовано или узнать о синтаксисе команды, прочитайте страницу руководства для страниц справочника (5).

  • Для получения дополнительной информации об этой технологии, ищите другую документацию в Библиотеке Разработчика Apple.

  • Для получения общей информации о записи сценариев оболочки, считайте Shell, Пишущий сценарий Учебника для начинающих.



Moose::Cookbook::Extending::Recipe3(3)ser Contributed Perl Documentationose::Cookbook::Extending::Recipe3(3)



NAME
       Moose::Cookbook::Extending::Recipe3 - Providing an alternate base object class

VERSION
       version 2.0205

SYNOPSIS
         package MyApp::Base;
         use Moose;

         extends 'Moose::Object';

         before 'new' => sub { warn "Making a new " . $_[0] };

         no Moose;

         package MyApp::UseMyBase;
         use Moose ();
         use Moose::Exporter;

         Moose::Exporter->setup_import_methods( also => 'Moose' );

         sub init_meta {
             shift;
             return Moose->init_meta( @_, base_class => 'MyApp::Base' );
         }

DESCRIPTION
       A common extension is to provide an alternate base class. One way to do that is to make a
       "MyApp::base" and add "extends 'MyApp::Base'" to every class in your application. That's pretty
       tedious. Instead, you can create a Moose-alike module that sets the base object class to
       "MyApp::Base" for you.

       Then, instead of writing "use Moose" you can write "use MyApp::UseMyBase".

       In this particular example, our base class issues some debugging output every time a new object is
       created, but you can think of some more interesting things to do with your own base class.

       This uses the magic of Moose::Exporter. When we call "Moose::Exporter->setup_import_methods( also =>
       'Moose' )" it builds "import" and "unimport" methods for you. The "also => 'Moose'" bit says that we
       want to export everything that Moose does.

       The "import" method that gets created will call our "init_meta" method, passing it "for_caller =>
       $caller" as its arguments. The $caller is set to the class that actually imported us in the first
       place.

       See the Moose::Exporter docs for more details on its API.

USING MyApp::UseMyBase
       To actually use our new base class, we simply use "MyApp::UseMyBase" instead of "Moose". We get all
       the Moose sugar plus our new base class.

         package Foo;

         use MyApp::UseMyBase;

         has 'size' => ( is => 'rw' );

         no MyApp::UseMyBase;

CONCLUSION
       This is an awful lot of magic for a simple base class. You will often want to combine a metaclass
       trait with a base class extension, and that's when this technique is useful.

AUTHOR
       Stevan Little <stevan@iinteractive.com>

COPYRIGHT AND LICENSE
       This software is copyright (c) 2011 by Infinity Interactive, Inc..

       This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5
       programming language system itself.



perl v5.12.5                                     2011-09-06           Moose::Cookbook::Extending::Recipe3(3)

Сообщение о проблемах

Способ сообщить о проблеме с этой страницей руководства зависит от типа проблемы:

Ошибки содержания
Ошибки отчета в содержании этой документации к проекту Perl. (См. perlbug (1) для инструкций представления.)
Отчеты об ошибках
Сообщите об ошибках в функциональности описанного инструмента или API к Apple через Генератор отчетов Ошибки и к проекту Perl, использующему perlbug (1).
Форматирование проблем
Отчет, форматирующий ошибки в интерактивной версии этих страниц со ссылками на отзыв ниже.