我一直试图像perltoot描述的那样在对象内部创建闭包。我已经完全复制了它,甚至还复制和粘贴了它,但我仍然能够以常规方式访问对象
$obj->('NAME')
。我开始对它失去耐心了! 我是否有什么误解?我多年来一直在为个人项目使用perl,并开始逐渐掌握类和OOP等概念。package Person;
sub new {
my $that = shift;
my $class = ref($that) || $that;
my $self = {
NAME => undef,
AGE => undef,
PEERS => [],
};
my $closure = sub {
my $field = shift;
if (@_) { $self->{$field} = shift }
return $self->{$field};
};
bless($closure, $class);
return $closure;
}
sub name { &{ $_[0] }("NAME", @_[ 1 .. $#_ ] ) }
sub age { &{ $_[0] }("AGE", @_[ 1 .. $#_ ] ) }
sub peers { &{ $_[0] }("PEERS", @_[ 1 .. $#_ ] ) }
1;
$obj->name
,但无法访问$obj->('NAME')
(即“私有”或“内部”)。如果是这种情况,也许可以考虑使用 inside-out 对象?不过在OP研究了几种可能的Perl OO内部变体之后,我建议使用现有的OO框架,比如Moose。 - Neil Slater