Aion
view release on metacpan or search on metacpan
СигнаÑÑÑа меÑодов Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑовеÑÑÑÑÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð°ÑÑибÑÑа `:Isa(...)`.
# SUBROUTINES IN CLASSES AND ROLES
`use Aion` импоÑÑиÑÑÐµÑ ÑÐ¸Ð¿Ñ Ð¸Ð· модÑÐ»Ñ `Aion::Types` и ÑледÑÑÑие подпÑогÑаммÑ:
## has ($name, %aspects)
СоздаÑÑ Ð¼ÐµÑод Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑениÑ/ÑÑÑановки ÑÑнкÑии (ÑвойÑÑва) клаÑÑа.
Файл lib/Animal.pm:
```perl
package Animal;
use Aion;
has type => (is => 'ro+', isa => Str);
has name => (is => 'rw-', isa => Str, default => 'murka');
1;
```
```perl
use lib "lib";
use Animal;
my $cat = Animal->new(type => 'cat');
$cat->type # => cat
$cat->name # => murka
$cat->name("murzik");
$cat->name # => murzik
```
## with
ÐобавлÑÐµÑ Ð² модÑÐ»Ñ Ñоли. ÐÐ»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ Ñоли вÑзÑваеÑÑÑ Ð¼ÐµÑод `import_with`.
Файл lib/Role/Keys/Stringify.pm:
```perl
package Role::Keys::Stringify;
use Aion -role;
sub keysify {
my ($self) = @_;
join ", ", sort keys %$self;
}
1;
```
Файл lib/Role/Values/Stringify.pm:
```perl
package Role::Values::Stringify;
use Aion -role;
sub valsify {
my ($self) = @_;
join ", ", map $self->{$_}, sort keys %$self;
}
1;
```
Файл lib/Class/All/Stringify.pm:
```perl
package Class::All::Stringify;
use Aion;
with q/Role::Keys::Stringify/;
with q/Role::Values::Stringify/;
has [qw/key1 key2/] => (is => 'rw', isa => Str);
1;
```
```perl
use lib "lib";
use Class::All::Stringify;
my $s = Class::All::Stringify->new(key1=>"a", key2=>"b");
$s->keysify # => key1, key2
$s->valsify # => a, b
```
## exactly ($package)
ÐÑовеÑÑеÑ, ÑÑо `$package` â ÑÑо ÑÑпеÑклаÑÑ Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ или Ñам ÑÑÐ¾Ñ ÐºÐ»Ð°ÑÑ.
РеализаÑÐ¸Ñ Ð¼ÐµÑода `isa` Aion не менÑÐµÑ Ð¸ она наÑ
Ð¾Ð´Ð¸Ñ ÐºÐ°Ðº ÑÑпеÑклаÑÑÑ, Ñак и Ñоли (Ñак как и Ñе и дÑÑгие добавлÑÑÑÑÑ Ð² `@ISA` пакеÑа).
```perl
package Ex::X { use Aion; }
package Ex::A { use Aion; extends q/Ex::X/; }
package Ex::B { use Aion; }
package Ex::C { use Aion; extends qw/Ex::A Ex::B/ }
Ex::C->exactly("Ex::A") # -> 1
Ex::C->exactly("Ex::B") # -> 1
Ex::C->exactly("Ex::X") # -> 1
Ex::C->exactly("Ex::X1") # -> ""
Ex::A->exactly("Ex::X") # -> 1
Ex::A->exactly("Ex::A") # -> 1
Ex::X->exactly("Ex::X") # -> 1
```
## does ($package)
ÐÑовеÑÑеÑ, ÑÑо `$package` â ÑÑо ÑолÑ, коÑоÑÐ°Ñ Ð¸ÑполÑзÑеÑÑÑ Ð² клаÑÑе или дÑÑгой Ñоли.
```perl
package Role::X { use Aion -role; }
package Role::A { use Aion -role; with qw/Role::X/; }
package Role::B { use Aion -role; }
package Ex::Z { use Aion; with qw/Role::A Role::B/; }
( run in 1.483 second using v1.01-cache-2.11-cpan-437f7b0c052 )