gpt4 book ai didi

perl - 如何编写可读的子例程哈希参数?

转载 作者:行者123 更新时间:2023-12-01 11:43:52 25 4
gpt4 key购买 nike

在工作中,我们喜欢将参数作为哈希引用传递给子例程:

my $manager = DatabaseManager->new({
'sHost' => 'my_host',
'sDatabase' => 'some_database'
});

对象本身有一个看起来像这样的初始化函数:

sub _init
{
my ($self, $phArgs) = @_;

$self->{_sHost} = $phArgs->{sHost};
$self->{_sDatabase} = $phArgs->{sDatabase};
}

有什么办法可以解决这个问题吗?即使只有第一行可以更清晰,我认为这也是一种改进。有点像

sub _init
{
my ($self, ($host, $database) ) = @_;

$self->{_sHost} = $host;
$self->{_sDatabase} = $database;
}

那么子程序需要什么就很清楚了。有什么想法吗?

最佳答案

似乎您想“命名”这些选项。你可以这样做:

my ($self, $phArgs) = @_;
my ($sHost, $sDatabase) = @{$phArgs}{qw( sHost sDatabase )};

但是你最终提到了 sHostsDatabase 四次,因为你跟进了

$self->{_sHost}     = $sHost;
$self->{_sDatabase} = $sDatabase;

您对此无能为力,因为这正是您想要的。考虑到整个 sub 可以写成这样,我认为这太疯狂了:

my ($self, $phArgs) = @_;
@$self{qw( _sHost sDatabase )} = @$phArgs{qw( sHost sDatabase )};

my ($self, $phArgs) = @_;
$self->{"_".$_} = $phArgs->{$_} for qw( sHost sDatabase );

关于perl - 如何编写可读的子例程哈希参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17242538/

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