gpt4 book ai didi

perl - OO-Perl 别名类属性

转载 作者:行者123 更新时间:2023-12-05 00:55:52 24 4
gpt4 key购买 nike

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

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com