2011-10-19 23 views
0

我以爲我可以咖喱布爾本機類型設置爲給定函數調用真或假,但似乎並沒有工作,我沒有料到如何爲一個布爾類型嵌入一個內置函數(並將其設置爲1或0)?

與性狀更新

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

     } 
); 
+0

請不要更新答案的問題;他們讓你的問題對世界其他地方不那麼有用。 – darch

+0

它不是我缺少的特徵是我使用set的問題,所以實際上 - 我沒有,因爲在我的實際中,這不是問題。但是,謝謝! – qodeninja

回答

6

我想你在這裏尋找Moose::Meta::Attribute::Native::Trait::Bool,由traits => ['Bool']指定。

當你已經是isa => 'Bool', default => 0,你的屬性不持有的對象。你不能在數字0上調用方法,所以它不能在沒有本地特徵幫助的情況下調用任何東西。

Moose::Meta::Attribute::Native:「原住民代表團允許你委託給本地Perl數據結構,如果他們的對象。」這意味着,當您使用handles時,它們會生成特殊的方法,對屬性執行某些操作,而不是調用屬性中存儲的對象的方法。該布爾天然性狀提供setunsettoggle方法,這意味着你可以做你想做什麼:

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