Я абсолютный новичок в Moose
, и до сих пор я прочитал Moose
и большую часть поваренной книги .
Есть несколько вещей, которые я не понимаю. Я создал следующий пакет:
package MyRange;
use Moose;
use namespace::autoclean;
has [ 'start', 'end' ] => (
is => 'ro',
isa => 'Int',
required => 1,
);
__PACKAGE__->meta->make_immutable;
1;
Тогда:
use MyRange;
my $br = MyRange->new(
start => 100,
end => 180
);
Теперь я могу получить доступ к своим полям, например, с помощью $br->{start}
, но я также могу изменить их (хотя они «только для чтения»), например, используя $br->{start}=5000
. Я также могу добавить новые ключи, такие как $br->{xxx}=111
.
Я что-то упустил? Разве объект не защищен каким-либо образом? В чем смысл ro
?