我想要一些属性(也许这是在这种情况下这是错误的术语)是私有的,也就是说,只有内部用于对象使用 - 不能从外部读取或写入.
例如,考虑一些内部变量,它计算调用任何一组方法的次数.
我应该在哪里以及如何定义这样的变量?
dra*_*tun 15
该Moose::Manual::Attributes节目通过以下方式创建私有属性:
has '_genetic_code' => (
is => 'ro',
lazy => 1,
builder => '_build_genetic_code',
init_arg => undef,
);
Run Code Online (Sandbox Code Playgroud)
设置init_arg意味着无法在构造函数中设置此属性.如果您需要更新它,请将其设为rw或添加writer.
/ I3az /
小智 10
你可以尝试这样的事情:
has 'call_counter' => (
is => 'ro',
writer => '_set_call_counter',
);
Run Code Online (Sandbox Code Playgroud)
is => 'ro'使该属性只读.穆斯产生一个吸气剂.您的方法将使用getter来增加值,如下所示:
sub called {
my $self = shift;
$self->_set_call_counter( $self->call_counter + 1 );
...
}
Run Code Online (Sandbox Code Playgroud)
writer => '_set_call_counter'生成一个名为的setter _set_call_counter.Moose不支持真正的私有属性.从技术上讲,外部代码可以调用_set_call_counter.但是,按照惯例,应用程序不会调用以下划线开头的方法.
我想你想要MooseX :: Privacy.
perldoc告诉你所有你需要的东西 - 它为你的属性添加了一个新的特性,允许你将它们声明为私有或受保护:
has config => (
is => 'rw',
isa => 'Some::Config',
traits => [qw/Private/],
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5864 次 |
| 最近记录: |