LINUX.ORG.RU

История изменений

Исправление KennyMinigun, (текущая версия) :

Ну в общем-то без reflection и introspection тебе всяко придётся что-нибудь «хардкодить»,

В перле это попроще делается :)

package MyApp::VCS;

use Moose::Role;
use Moose::Util qw(does_role);

use Module::Pluggable
    max_depth => 1,
    search_path => [ __PACKAGE__ ]
;

# в этом массиве будут имена всех классов в неймспейсе MyApp::VCS::*
# которые имплементируют роль MyApp::VCS
my @successors = grep { does_role($_, __PACKAGE__) } __PACKAGE__->plugins;

Ну.. да, по сути это reflection.

Исправление KennyMinigun, :

Ну в общем-то без reflection и introspection тебе всяко придётся что-нибудь «хардкодить»,

В перле это попроще делается :)

package MyApp::VCS;

use Moose::Role;
use Moose::Util qw(does_role);

use Module::Pluggable
    max_depth => 1,
    search_path => [ __PACKAGE__ ]
;

# в этом массиве будут имена всех классов в неймспейсе MyApp::VCS::*
# которые имплементируют роль MyApp::VCS
my @successors = grep { does_role($_, __PACKAGE__) } __PACKAGE__->plugins;

Ну.. да, по сути это introspection.

Исходная версия KennyMinigun, :

Ну в общем-то без reflection и introspection тебе всяко придётся что-нибудь «хардкодить»,

В перле это по-проще :)

package MyApp::VCS;

use Moose::Role;
use Moose::Util qw(does_role);

use Module::Pluggable
    max_depth => 1,
    search_path => [ __PACKAGE__ ]
;

# в этом массиве будут имена всех классов в неймспейсе MyApp::VCS::*
# которые имплементируют роль MyApp::VCS
my @successors = grep { does_role($_, __PACKAGE__) } __PACKAGE__->plugins;

Ну.. да, по сути это introspection.