我有一个正在开发的模块。我正在设置一些这样的属性:
$self->{FOO};
$self->{BAR};
$self->{FOOBAR};
而且,我想使用 AUTOLOAD 来帮助创建访问这些属性的方法。例如,$foo->Bar()
返回 $self->{BAR}
的值。没问题。一切都是标准的。
现在,我想创建别名方法。例如,如果有人说 $obj->Fu();
,我将返回 $self->{FOO}
。我想做的是创建一个指向与 $self->{FOO}
相同的内存位置的 $self->{FU}
。这样,当我设置 $self->{FOO}
的值时,$self-{FU}
也被设置。这样,我不必对 AUTOLOAD 的工作方式进行各种更改,也不必在每次设置 $self->{FOO} 时记住设置
。$self->{FU}
有什么简单的方法吗?
最佳答案
是的,使用 Moose ,而不是试图在散列之间进行显式映射 键。编写自己的访问器或使用 AUTOLOAD 是没有必要的,并且已经 更高的错误机会:
package MyClass;
use Moose;
use MooseX::Aliases;
has foo => (
is => 'rw', isa => 'Str',
alias => 'fu',
);
has bar => (
is => 'rw', isa => 'Str',
);
__PACKAGE__->meta->make_immutable;
no Moose;
1;
package main;
use strict;
use warnings;
use MyClass;
my $obj = MyClass->new;
$obj->foo("value");
$obj->fu("a new value");
# prints "foo has the value 'a new value'"
print "foo has the value '", $obj->foo, "'\n";
关于perl - OO-Perl 别名类属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3899054/