我认为我可以在给定函数调用的情况下将布尔本机类型设置为true或false,但似乎没有按预期工作
使用特征更新
has 'Lock' => (
is => 'ro',
isa => 'Bool',
traits => ['Bool'],
default => 0 ,
reader => 'isLocked',
handles => {
lock => [ set => 1 ],
unlock => [ set => 0 ],
flip => 'toggle',
}
);
答案 0 :(得分:6)
我认为您在这里寻找Moose::Meta::Attribute::Native::Trait::Bool,由traits => ['Bool']
指定。
如果您拥有的只是isa => 'Bool', default => 0
,则您的属性不会包含对象。你不能在数字0上调用方法,因此如果没有本地特征的帮助,它就不能handles
。
来自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',
}
);