perl - OO-Perl 别名类属性

标签 perl alias-method

我有一个正在开发的模块。我正在设置一些这样的属性:

$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/

相关文章:

perl - 从适当命名的变量中命名参数的快捷方式

Ruby:模块静态方法的别名_方法

ruby-on-rails - alias_method 和 alias_method_chain 有什么区别?

perl - 无法正确合并哈希

linux - 用文件中的混合特殊字符替换文本

python - 更改电子表格中每个单元格中首字母的大小写

regex - perl 正则表达式转义字符

ruby-on-rails - ruby /rails : alias_method practices

继承类中的ruby method_alias

ruby - 我可以删除 Ruby 中的方法别名吗?