Aion
view release on metacpan or search on metacpan
ExIs->new(ro => 10)->wo(30)->has("wo") # -> 1
eval { ExIs->new(ro => 10)->wo }; $@ # ~> has: wo is wo- \(not get\)
ExIs->new(ro => 10)->rw(30)->rw # -> 30
```
ФÑнкÑÐ¸Ñ Ñ `*` не ÑдеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð·Ð½Ð°Ñение:
```perl
package Node { use Aion;
has parent => (is => "rw*", isa => Maybe[Object["Node"]]);
}
my $root = Node->new;
my $node = Node->new(parent => $root);
$node->parent->parent # -> undef
undef $root;
$node->parent # -> undef
# And by setter:
$node->parent($root = Node->new);
$node->parent->parent # -> undef
undef $root;
$node->parent # -> undef
```
## isa => $type
УказÑÐ²Ð°ÐµÑ Ñип, а ÑоÑнее â валидаÑоÑ, ÑиÑи.
```perl
package ExIsa { use Aion;
has x => (is => 'ro', isa => Int);
}
lib/Aion.md view on Meta::CPAN
ExIs->new(ro => 10)->wo(30)->has("wo") # -> 1
eval { ExIs->new(ro => 10)->wo }; $@ # ~> has: wo is wo- \(not get\)
ExIs->new(ro => 10)->rw(30)->rw # -> 30
```
ФÑнкÑÐ¸Ñ Ñ `*` не ÑдеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð·Ð½Ð°Ñение:
```perl
package Node { use Aion;
has parent => (is => "rw*", isa => Maybe[Object["Node"]]);
}
my $root = Node->new;
my $node = Node->new(parent => $root);
$node->parent->parent # -> undef
undef $root;
$node->parent # -> undef
# And by setter:
$node->parent($root = Node->new);
$node->parent->parent # -> undef
undef $root;
$node->parent # -> undef
```
## isa => $type
УказÑÐ²Ð°ÐµÑ Ñип, а ÑоÑнее â валидаÑоÑ, ÑиÑи.
```perl
package ExIsa { use Aion;
has x => (is => 'ro', isa => Int);
}
lib/Aion.pm view on Meta::CPAN
ExIs->new(ro => 10)->ro # -> 10
ExIs->new(ro => 10)->wo(30)->has("wo") # -> 1
eval { ExIs->new(ro => 10)->wo }; $@ # ~> has: wo is wo- \(not get\)
ExIs->new(ro => 10)->rw(30)->rw # -> 30
The function with C<*> does not hold the meaning:
package Node { use Aion;
has parent => (is => "rw*", isa => Maybe[Object["Node"]]);
}
my $root = Node->new;
my $node = Node->new(parent => $root);
$node->parent->parent # -> undef
undef $root;
$node->parent # -> undef
# And by setter:
$node->parent($root = Node->new);
$node->parent->parent # -> undef
undef $root;
$node->parent # -> undef
=head2 isa => $type
Indicates the type, or rather - a validator, feature.
package ExIsa { use Aion;
has x => (is => 'ro', isa => Int);
}
eval { ExIsa->new(x => 'str') }; $@ # ~> \* Feature x must have the type Int. The it is 'str'
lib/Aion/Types.md view on Meta::CPAN
subtype Many => (where => sub { $_ > 1 });
}
2 ~~ Many # -> 1
eval { subtype Many => (where1 => sub { $_ > 1 }) }; $@ # ~> subtype Many unused keys left: where1
eval { subtype 'Many' }; $@ # ~> subtype Many: main::Many exists!
```
## as ($parenttype)
Use with `subtype` for extended create type of `$parenttype`.
## init_where ($code)
Initialize type with new arguments. Use with `subtype`.
```perl
BEGIN {
subtype 'LessThen[A]',
init_where { Num->validate(A, "Argument LessThen[A]") }
where { $_ < A };
lib/Aion/Types.pm view on Meta::CPAN
BEGIN {
subtype Many => (where => sub { $_ > 1 });
}
2 ~~ Many # -> 1
eval { subtype Many => (where1 => sub { $_ > 1 }) }; $@ # ~> subtype Many unused keys left: where1
eval { subtype 'Many' }; $@ # ~> subtype Many: main::Many exists!
=head2 as ($parenttype)
Use with C<subtype> for extended create type of C<$parenttype>.
=head2 init_where ($code)
Initialize type with new arguments. Use with C<subtype>.
BEGIN {
subtype 'LessThen[A]',
init_where { Num->validate(A, "Argument LessThen[A]") }
where { $_ < A };
}
::is scalar do {ExIs->new(ro => 10)->wo(30)->has("wo")}, scalar do{1}, 'ExIs->new(ro => 10)->wo(30)->has("wo") # -> 1';
::like scalar do {eval { ExIs->new(ro => 10)->wo }; $@}, qr!has: wo is wo- \(not get\)!, 'eval { ExIs->new(ro => 10)->wo }; $@ # ~> has: wo is wo- \(not get\)';
::is scalar do {ExIs->new(ro => 10)->rw(30)->rw}, scalar do{30}, 'ExIs->new(ro => 10)->rw(30)->rw # -> 30';
#
# ФÑнкÑÐ¸Ñ Ñ `*` не ÑдеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð·Ð½Ð°Ñение:
#
package Node { use Aion;
has parent => (is => "rw*", isa => Maybe[Object["Node"]]);
}
my $root = Node->new;
my $node = Node->new(parent => $root);
::is scalar do {$node->parent->parent}, scalar do{undef}, '$node->parent->parent # -> undef';
undef $root;
::is scalar do {$node->parent}, scalar do{undef}, '$node->parent # -> undef';
# And by setter:
$node->parent($root = Node->new);
::is scalar do {$node->parent->parent}, scalar do{undef}, '$node->parent->parent # -> undef';
undef $root;
::is scalar do {$node->parent}, scalar do{undef}, '$node->parent # -> undef';
#
# ## isa => $type
#
# УказÑÐ²Ð°ÐµÑ Ñип, а ÑоÑнее â валидаÑоÑ, ÑиÑи.
#
done_testing; }; subtest 'isa => $type' => sub {
package ExIsa { use Aion;
has x => (is => 'ro', isa => Int);
}
t/aion/types.t view on Meta::CPAN
subtype Many => (where => sub { $_ > 1 });
}
::is scalar do {2 ~~ Many}, scalar do{1}, '2 ~~ Many # -> 1';
::like scalar do {eval { subtype Many => (where1 => sub { $_ > 1 }) }; $@}, qr!subtype Many unused keys left: where1!, 'eval { subtype Many => (where1 => sub { $_ > 1 }) }; $@ # ~> subtype Many unused keys left: where1';
::like scalar do {eval { subtype 'Many' }; $@}, qr!subtype Many: main::Many exists\!!, 'eval { subtype \'Many\' }; $@ # ~> subtype Many: main::Many exists!';
#
# ## as ($parenttype)
#
# Use with `subtype` for extended create type of `$parenttype`.
#
# ## init_where ($code)
#
# Initialize type with new arguments. Use with `subtype`.
#
done_testing; }; subtest 'init_where ($code)' => sub {
BEGIN {
subtype 'LessThen[A]',
init_where { Num->validate(A, "Argument LessThen[A]") }
where { $_ < A };
( run in 0.363 second using v1.01-cache-2.11-cpan-4d50c553e7e )