Название
Mojo::Base - Минимальный класс для проектов Mojo(Mojolicious)
Синопсис
package Car; use base 'Mojo::Base'; # создание метода 'driver' в пакете Car __PACKAGE__->attr('driver'); # создание метода 'doors' в пакете Car # который должен возвращать значение '2' __PACKAGE__->attr('doors' => 2); # создание методов 'passengers' и 'seats' в пакете Car # каждый из них представляет собой подпрограмму sub { 2 } __PACKAGE__->attr([qw/passengers seats/] => sub { 2 }); package main; my $bmw = Car->new; # метод doors возвращает неопределенное значение print $bmw->doors; # метод doors() присваивает значение '5', которое он затем # возвратит в последующем обращении к нему # print $bmw->doors(5)->doors; # создание метода 'driver' в пакете Car # который должен возвращать значение 'Sebastian' my $mercedes = Car->new(driver => 'Sebastian'); # метод passengers содержит значение '2' # которое замещается значением '7' print $mercedes->passengers(7)->passengers;
Описание
Mojo::Base - предоставляет простой способ создания новых методов класса.
Методы
new
new - основной конструктор объектов Mojo.
NamePackage->new()
Если констуктору new не переданы параметры, методы объекта будут возвращать значения по умолчанию.
NamePackage->new('name_method' => 'value')
NamePackage->new({ 'name_method' => 'value' })
Чтобы заместить значения по умолчанию для методов объекта, нужно передать конструктору new хэш атрибутов или ссылку на хэш атрибутов.
package Car; use base 'Mojo::Base'; __PACKAGE__->attr( driver => 'Вася' ); package main; # создаем объект my $bmw = Car->new; # метод driver возвращает Васю print $bmv->driver, "\n"; # создаем объект и замещаем значение по умолчанию # возвращаемое методом driver my $bmv = Car->new(driver => 'Петя'); # метод driver возвращает Петю print $bmv->driver, "\n";
attr
Конструктор attr создает в текущем пакете новые методы.
package Car; use base 'Mojo::Base'; __PACKAGE__->attr('name'); __PACKAGE__->attr([qw/name1 name2 name3/]); __PACKAGE__->attr(name => 'foo'); __PACKAGE__->attr(name => sub { ... }); __PACKAGE__->attr([qw/name1 name2 name3/] => 'foo'); __PACKAGE__->attr([qw/name1 name2 name3/] => sub { ... });
__PACKAGE__->attr('name')
__PACKAGE__->attr('name' => 'value')
Создается метод name. Cтрока name должна соответствовать шаблону
/^[a-zA-Z_]\w*$/
. Второй необязательный параметр value - атрибут метода.__PACKAGE__->attr([qw/name1 name2 name3/])
__PACKAGE__->attr([qw/name1 name2 name3/] => 'value')
__PACKAGE__->attr([qw/name1 name2 name3/] => sub{ ... })
Каждый из элементов [qw/name1 name2 name3/] - имя метода который нужно создать.
Второй необязательный параметр - значение 'value' - будет возвращаться при вызове метода либо ссылка на подпрограмму sub{ ... } - будет выполняется при вызове указанного в первом параметре метода.