407
|
1 package IMPL::Object::Meta;
|
|
2 use strict;
|
|
3 use warnings;
|
|
4
|
|
5 use IMPL::Const qw(:prop);
|
|
6 use IMPL::declare {
|
|
7 base => [
|
|
8 'IMPL::Object' => undef
|
|
9 ],
|
|
10 props => [
|
|
11 owner => PROP_RO
|
|
12 ]
|
|
13 };
|
|
14
|
|
15 sub meta {
|
|
16 my $class = shift;
|
|
17 my $caller = caller;
|
|
18 my $meta = $class->surrogate();
|
|
19 $meta->owner(scalar caller);
|
|
20 $meta->callCTOR(@_);
|
|
21 $caller->SetMeta($meta);
|
|
22 }
|
|
23
|
|
24 1;
|
|
25
|
|
26 __END__
|
|
27
|
|
28 =pod
|
|
29
|
|
30 =head1 SYNOPSIS
|
|
31
|
|
32 package Foo;
|
|
33
|
|
34 meta BarAttribute('Simple bar attribute'); #mark Foo with BarAttribute
|
|
35
|
|
36 =head1 DESCRIPTION
|
|
37
|
|
38 Базовый класс для мета-свойств класса. Определяет оператор C< meta > для создания метаданных в вызвавшем классе.
|
|
39
|
|
40 =head1 MEMBERS
|
|
41
|
|
42 =over
|
|
43
|
|
44 =item C< Container >
|
|
45
|
|
46 Свойство заполняется до вызова конструктора и содержит имя модуля к которому применяется атрибут.
|
|
47
|
|
48 =back
|
|
49
|
|
50 =cut
|