2011-03-02 101 views
5

我正在使用Moose對象,但是我需要聲明靜態成員,這些對象只會執行一次,而且與對象無關。如何在Moose中聲明/使用靜態成員?

你有什麼想法或例子嗎?

謝謝

Dotan。

+1

只需使用像使用普通的包變量香草的Perl。 – 2011-03-04 17:35:27

回答

6

您可以使用MooseX::ClassAttribute

package SomeClass; 
use Moose; 
use MooseX::ClassAttribute; 

class_has 'static_member' => (is => 'rw'); 

該成員存取使用SomeClass->static_member

2

我試圖玩弄MooseX :: ClassAttribute爲超視距建議,但我最終只是將它們設置爲只讀成員默認:

has 'static_thing' => (is => 'ro', init_arg => undef, default => 42); 

似乎簡單。

+1

對於任何不會消耗大量內存的地方,或者可以擁有同一事物的多個副本的情況,這沒什麼 - 但有時您只需要一個同樣的東西(比如數據庫句柄)就可以在所有對象之間共享,這是類屬性可以使用的地方。 – Ether 2011-03-02 17:03:57

+0

到目前爲止,我曾在一兩個地方使用過,通常用於需要在班級成員之間共享的東西(如Ether所說)。 – bvr 2011-03-02 17:10:07

+0

另請注意,您需要一個實例來訪問非靜態屬性。獲取實例並不總是很方便。 – 2011-06-15 14:43:44

2

下的所有鹿岬還有普通老式的Perl

所以只設置在類名.pm文件中的變量

package SomeClass; 
use Moose; 

my $instance_counter = 0; 

around BUILDARGS => sub { 
    $instance_counter += 1; 
} 

. . .