Perl Moose 属性句柄设置方法
Posted
技术标签:
【中文标题】Perl Moose 属性句柄设置方法【英文标题】:Perl Moose attribute handles set method 【发布时间】:2022-01-14 18:37:12 【问题描述】:在'options'示例的行中定义了一个HashRef属性。
has 'clsHsh' => (
traits => ['Hash'],
is => 'rw',
isa => 'HashRef[Str]',
default => sub ,
handles =>
set_clsHsh => 'set',
get_clsHsh => 'get',
has_no_clsHsh => 'is_empty',
num_clsHsh => 'count',
delete_clsHsh => 'delete',
clsHash_pairs => 'kv',
,
);
sub parseCls2()
my ($self,$line) = @_;
#input $line format is as follows
#$line = qq<Class att1=val1 att2=val3.../>)
#gather all key value pairs sans <Class
$line =~ s/<Class(.*)\/>/$1/g;
# split on space and take the resulting array
# split that on =. Simply equating to hash will convert
# key1,val1,key2,val2... to hash of key and value.
my %l4_sh = map split /=/ split / /,$line;
$self->clsHsh = \%l4_sh;
return $self->clsHsh;
#
# example of parsing a line
#
my $line = qq(<Class Cls="Bid" description="bid" low="" high=""/>)
;
my $h = $parser->parseCls2($line);
my %h1 = %$h;
while (my ($k,$v) = each %h1)
say "key = $k and value = $v"
我能够使用解析 $line 输入参数并将解析值存储在哈希中的子来填充 clsHsh 属性。 我的问题,
-
有没有办法重新利用 set_clsHsh 而不是使用 sub?
推荐的方式是什么?
【问题讨论】:
“重新利用 set_clsHsh” “重新利用”是什么意思? 我使用 sub parse($line) 来填充 clsHsh。我可以改用 set_ClsHsh 吗?如果有,怎么做? 请编辑您的问题。添加一个完整的可运行示例。你的parse()
如何访问clsHash? set_clsHsh 的唯一目的是设置此哈希中的元素:$obj->set_clsHsh($key,$val)
【参考方案1】:
@clamp - 感谢您的提示。我修改了 Parse.pm 文件中的 sub,它现在可以工作了。
has 'clsHsh' => (
traits => ['Hash'],
is => 'rw',
isa => 'HashRef[Str]',
default => sub ,
handles =>
set_clsHsh => 'set',
get_clsHsh => 'get',
has_no_clsHsh => 'is_empty',
num_clsHsh => 'count',
delete_clsHsh => 'delete',
clsHash_pairs => 'kv',
,
);
sub parseCls2()
my ($self,$line) = @_;
#input $line format is as follows
#$line = qq<Class att1=val1 att2=val3.../>)
#gather all key value pairs sans <Class
$line =~ s/<Class(.*)\/>/$1/g;
# split on space and take the resulting array
# split that on =. Simply equating to hash will convert
# key1,val1,key2,val2... to hash of key and value.
$self->set_clsHsh(map split /=/ split / /,$line);
现在,我获取 clsHsh 的访问方法 (parse_test.pl) 变得更简单了。
my $line = qq(<Class Cls="Bid" description="bid" low="low" high="high"/>)
;
$parser->parseCls2($line);
my $k1 = "low";
say $parser->get_clsHsh($k1);
【讨论】:
以上是关于Perl Moose 属性句柄设置方法的主要内容,如果未能解决你的问题,请参考以下文章