qod*_*nja 0 perl moose currying
我认为我可以在给定函数调用的情况下将布尔本机类型设置为true或false,但似乎没有按预期工作
更新了特征
has 'Lock' => (
is => 'ro',
isa => 'Bool',
traits => ['Bool'],
default => 0 ,
reader => 'isLocked',
handles => {
lock => [ set => 1 ],
unlock => [ set => 0 ],
flip => 'toggle',
}
);
Run Code Online (Sandbox Code Playgroud)
我想你在这里寻找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',
}
);
Run Code Online (Sandbox Code Playgroud)