Aion
view release on metacpan or search on metacpan
lib/Aion/Types.md view on Meta::CPAN
!ru:en
# NAME
Aion::Types - библиоÑека ÑÑандаÑÑнÑÑ
валидаÑоÑов и ÑлÑÐ¶Ð¸Ñ Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð½Ð¾Ð²ÑÑ
валидаÑоÑов
# SYNOPSIS
```perl
use Aion::Types;
BEGIN {
subtype SpeakOfKitty => as StrMatch[qr/\bkitty\b/i],
message { "Speak is'nt included kitty!" };
}
"Kitty!" ~~ SpeakOfKitty # -> 1
"abc" ~~ SpeakOfKitty # -> ""
SpeakOfKitty->validate("abc", "This") # @-> Speak is'nt included kitty!
BEGIN {
subtype IntOrArrayRef => as (Int | ArrayRef);
}
[] ~~ IntOrArrayRef # -> 1
35 ~~ IntOrArrayRef # -> 1
"" ~~ IntOrArrayRef # -> ""
coerce IntOrArrayRef, from Num, via { int($_ + .5) };
IntOrArrayRef->coerce(5.5) # => 6
```
# DESCRIPTION
ÐÑÐ¾Ñ Ð¼Ð¾Ð´ÑÐ»Ñ ÑкÑпоÑÑиÑÑÐµÑ Ð¿Ð¾Ð´Ð¿ÑогÑаммÑ:
* `subtype`, `as`, `init_where`, `where`, `awhere`, `message` â Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð²Ð°Ð»Ð¸Ð´Ð°ÑоÑов.
* `SELF`, `ARGS`, `A`, `B`, `C`, `D`, `M`, `N` â Ð´Ð»Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² валидаÑоÑаÑ
Ñипа и его аÑгÑменÑов.
* `coerce`, `from`, `via` â Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÐºÐ¾Ð½Ð²ÐµÑÑоÑа знаÑений из одного клаÑÑа в дÑÑгой.
ÐеÑаÑÑ
Ð¸Ñ Ð²Ð°Ð»Ð¸Ð´Ð°ÑоÑов:
```text
Any
Control
Union[A, B...]
Intersection[A, B...]
Exclude[A...]
Option[A]
Wantarray[A, B]
Item
External[type]
Bool
BoolLike
Enum[e...]
Maybe[A]
Undef
Defined
Value
Version
Str
Uni
Bin
NonEmptyStr
StartsWith[start]
EndsWith[end]
Email
Tel
Url
Path
Html
StrDate
StrDateTime
StrMatch[regexp]
ClassName
RoleName
Join[separator]
Split[separator]
StrRat
Num
PositiveNum
Int
PositiveInt
Nat
Ref
Tied`[class]
LValueRef
FormatRef
CodeRef
NamedCode[subname]
ProtoCode[prototype]
ForwardRef
ImplementRef
Isa[A...]
RegexpRef
ValueRef`[A]
ScalarRef`[A]
RefRef`[A]
GlobRef
FileHandle
ArrayRef`[A]
HashRef`[A]
Object`[class]
Me
Rat
Map[A => B]
Tuple[A...]
lib/Aion/Types.md view on Meta::CPAN
Int->coerce(2.5) # -> 3
Int->coerce(-2.5) # -> -3
# Bool from Any â 1 or ""
Bool->coerce([]) # -> 1
Bool->coerce(0) # -> ""
```
## from ($type)
СинÑакÑиÑеÑкий ÑаÑ
Ð°Ñ Ð´Ð»Ñ `coerce`.
## via ($code)
СинÑакÑиÑеÑкий ÑаÑ
Ð°Ñ Ð´Ð»Ñ `coerce`.
# ATTRIBUTES
## :Isa (@signature)
ÐÑовеÑÑÐµÑ ÑигнаÑÑÑÑ Ð¿Ð¾Ð´Ð¿ÑогÑаммÑ: аÑгÑменÑÑ Ð¸ ÑезÑлÑÑаÑÑ.
```perl
sub minint($$) : Isa(Int => Int => Int) {
my ($x, $y) = @_;
$x < $y? $x : $y
}
minint 6, 5; # -> 5
eval {minint 5.5, 2}; $@ # ~> Arguments of method `minint` must have the type Tuple\[Int, Int\]\.
sub half($) : Isa(Int => Int) {
my ($x) = @_;
$x / 2
}
half 4; # -> 2
eval {half 5}; $@ # ~> Return of method `half` must have the type Int. The it is 2.5
```
# TYPES
## Any
Тип веÑÑ
него ÑÑÐ¾Ð²Ð½Ñ Ð² иеÑаÑÑ
ии. СопоÑÑавлÑÐµÑ Ð²ÑÑ.
## Control
Тип веÑÑ
него ÑÑÐ¾Ð²Ð½Ñ Ð² конÑÑÑÑкÑоÑаÑ
иеÑаÑÑ
ии ÑÐ¾Ð·Ð´Ð°ÐµÑ Ð½Ð¾Ð²Ñе ÑÐ¸Ð¿Ñ Ð¸Ð· лÑбÑÑ
Ñипов.
## Union[A, B...]
СоÑз неÑколÑкиÑ
Ñипов. ÐналогиÑен опеÑаÑоÑÑ `$type1 | $type2`.
```perl
33 ~~ Union[Int, Ref] # -> 1
[] ~~ Union[Int, Ref] # -> 1
"a" ~~ Union[Int, Ref] # -> ""
```
## Intersection[A, B...]
ÐеÑеÑеÑение неÑколÑкиÑ
Ñипов. ÐналогиÑен опеÑаÑоÑÑ `$type1 & $type2`.
```perl
15 ~~ Intersection[Int, StrMatch[/5/]] # -> 1
```
## Exclude[A, B...]
ÐÑклÑÑение неÑколÑкиÑ
Ñипов. ÐналогиÑен опеÑаÑоÑÑ `~ $type`.
```perl
-5 ~~ Exclude[PositiveInt] # -> 1
"a" ~~ Exclude[PositiveInt] # -> 1
5 ~~ Exclude[PositiveInt] # -> ""
5.5 ~~ Exclude[PositiveInt] # -> 1
```
ÐÑли `Exclude` Ð¸Ð¼ÐµÐµÑ Ð¼Ð½Ð¾Ð³Ð¾ аÑгÑменÑов, Ñо ÑÑо аналог `~ ($type1 | $type2 ...)`.
```perl
-5 ~~ Exclude[PositiveInt, Enum[-2]] # -> 1
-2 ~~ Exclude[PositiveInt, Enum[-2]] # -> ""
0 ~~ Exclude[PositiveInt, Enum[-2]] # -> ""
```
## Option[A]
ÐополниÑелÑнÑе клÑÑи в `Dict`.
```perl
{a=>55} ~~ Dict[a=>Int, b => Option[Int]] # -> 1
{a=>55, b=>31} ~~ Dict[a=>Int, b => Option[Int]] # -> 1
{a=>55, b=>31.5} ~~ Dict[a=>Int, b => Option[Int]] # -> ""
```
## Wantarray[A, S]
ÐÑли подпÑогÑамма возвÑаÑÐ°ÐµÑ ÑазнÑе знаÑÐµÐ½Ð¸Ñ Ð² конÑекÑÑе маÑÑива и ÑкалÑÑа, Ñо иÑполÑзÑеÑÑÑ Ñип `Wantarray` Ñ Ñипом `A` Ð´Ð»Ñ ÐºÐ¾Ð½ÑекÑÑа маÑÑива Ð...
```perl
sub arr : Isa(PositiveInt => Wantarray[ArrayRef[PositiveInt], PositiveInt]) {
my ($n) = @_;
wantarray? 1 .. $n: $n
}
my @a = arr(3);
my $s = arr(3);
\@a # --> [1,2,3]
$s # -> 3
```
## Item
Тип веÑÑ
него ÑÑÐ¾Ð²Ð½Ñ Ð² иеÑаÑÑ
ии ÑкалÑÑнÑÑ
Ñипов.
## External[type]
ÐÑавÑаÑÐ°ÐµÑ `type` в `Aion::Type`.
* ÐÑли `type` - `Aion::Type`, Ñо возвÑаÑÐ°ÐµÑ ÐµÐ³Ð¾ без изменений.
* ÐÑли `type` ÑÑÑока, Ñо обоÑаÑÐ¸Ð²Ð°ÐµÑ ÐµÐ³Ð¾ в `Object`.
* ÐÑли `type` можно вÑзваÑÑ, Ñо обоÑаÑÐ¸Ð²Ð°ÐµÑ ÐµÐ³Ð¾ в `Aion::Type->new(test => $type, ...)`. РеÑли он Ð¸Ð¼ÐµÐµÑ Ð¼ÐµÑод `coerce`, Ñо бÑÐ´ÐµÑ ÐµÐ³Ð¾ иÑполÑзоваÑÑ Ð´Ð»Ñ Ð¿ÑеобÑазован...
( run in 1.279 second using v1.01-cache-2.11-cpan-39bf76dae61 )