我应该如何将对象传递给子例程?

2024-02-14

这些方法之一是最好还是最差的方法?

使用范围:

my $cache = CHI->new( driver => 'File', expires_in => 3600 );

sub one {
    if ( my $data = $cache->get( 'key_one' ) ) {
    # ...
}

sub two {
    if ( my $data = $cache->get( 'key_two' ) ) {
    # ...
}

将对象作为参数传递:

my $cache = CHI->new( driver => 'File', expires_in => 3600 );

sub one {
    my ( $cache ) = @_;
    if ( my $data = $cache->get( 'key_one' ) ) {
    # ...
}

sub two {
    my ( $argument1, $cache ) = @_;
    if ( my $data = $cache->get( 'key_two' ) ) {
    # ...
}

或在子例程中创建一个新实例:

sub one {
    my $cache = CHI->new( driver => 'File', expires_in => 3600 );
    if ( my $data = $cache->get( 'key_one' ) ) {
    # ...
}

sub two {
    my $cache = CHI->new( driver => 'File', expires_in => 3600 );
    if ( my $data = $cache->get( 'key_two' ) ) {
    # ...
}

第一个选择使用全局变量,不是那么热。第三种选择是很多额外的开销。也不是很好,所以我想在你的问题的背景下,中间的选择更可取。更广泛的问题是为什么子例程需要了解缓存?看来他们只担心数据。我会考虑获取数据并将其传递给子例程,在那里他们不必担心它是被缓存还是刚刚创建。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我应该如何将对象传递给子例程? 的相关文章

随机推荐