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

时间:2011-10-19 02:24:36

标签: 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',

        }
  ); 

1 个答案:

答案 0 :(得分:6)

我认为您在这里寻找Moose::Meta::Attribute::Native::Trait::Bool,由traits => ['Bool']指定。

如果您拥有的只是isa => 'Bool', default => 0,则您的属性不会包含对象。你不能在数字0上调用方法,因此如果没有本地特征的帮助,它就不能handles

来自Moose::Meta::Attribute::Native:“本机委托允许您委托本机Perl数据结构,就好像它们是对象一样。”这意味着当您对它们使用handles时,它们会生成特殊方法,这些方法对属性执行某些操作,而不是对存储在属性中的对象调用方法。 Bool原生特质提供setunsettoggle方法,这意味着您可以按照自己的意愿行事:

has 'Lock'    => ( 
    is => 'ro', 
    isa => 'Bool',
    traits => ['Bool'],
    default => 0 ,
    reader  => 'isLocked', 
    handles => {
        lock     => 'set',
        unlock   => 'unset',
        flip     => 'toggle',
    }
 );