Я думаю, что вы ищете здесь Moose :: Meta :: Attribute :: Native :: Trait :: Bool , указанный traits => ['Bool']
.
Когда у вас есть isa => 'Bool', default => 0
, ваш атрибут не содержит объект. Вы не можете вызывать методы с номером 0, поэтому он не может handles
ничего без помощи нативной черты.
From Moose :: Meta :: Attribute :: Native : «Собственные делегирования позволяют делегировать собственные структуры данных Perl, как если бы они были объектами». Это означает, что когда вы используете handles
с ними, они генерируют специальные методы, которые выполняют определенные операции с атрибутом, кроме вызова метода для объекта, хранящегося в атрибуте. Родная черта Bool предоставляет методы set
, unset
и toggle
, что означает, что вы можете делать то, что хотите, с помощью:
has 'Lock' => (
is => 'ro',
isa => 'Bool',
traits => ['Bool'],
default => 0 ,
reader => 'isLocked',
handles => {
lock => 'set',
unlock => 'unset',
flip => 'toggle',
}
);