你如何为布尔类型设置内置函数(并将其设置为1或0)?

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)

hob*_*bbs 6

我想你在这里寻找Moose :: Meta :: Attribute :: Native :: Trait :: Bool,由...指定traits => ['Bool'].

当你拥有的只是isa => 'Bool', default => 0,你的属性不包含一个对象.你不能在数字0上调用方法,所以handles没有本地特征的帮助就没有任何东西.

来自Moose :: Meta :: Attribute :: Native:"本机委托允许您将本机Perl数据结构委托给它们,就好像它们是对象一样." 这意味着当您使用handles它们时,它们会生成特殊方法,这些方法对属性执行某些操作,而不是在属性中存储的对象上调用方法.Bool本机特性提供set,unsettoggle方法,这意味着你可以做你想要的:

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)