加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何在Perl对象上组织私有方法?

发布时间:2020-12-15 23:22:47 所属栏目:大数据 来源:网络整理
导读:处理用户不会调用的方法的正确方法是什么?例如,如果用户调用方法,例如从驱动程序脚本中调用do_stuff(),并且do_stuff()依赖于其他子例程,那么最好从do_stuff()方法中调用这些subs,如下所示: sub do_stuff { my ( $self,%arg ) = @_; #does it things #and t
处理用户不会调用的方法的正确方法是什么?例如,如果用户调用方法,例如从驱动程序脚本中调用do_stuff(),并且do_stuff()依赖于其他子例程,那么最好从do_stuff()方法中调用这些subs,如下所示:

sub do_stuff {
    my ( $self,%arg ) = @_;
    #does it things
    #and then calls the private sub as follows
    _private_sub( $self,%arg );
}

解决方法

如果你的do_stuff方法需要你决定应该保持“私有”的功能,那么一定要在其中调用_private_sub.这正是它的目的.当然,将子“私有”是一个惯例问题,因为它无法执行.

我想提一下使用coderefs进行私有子的另一种方式

my $_private = sub { ... };  # must be at least predeclared

sub do_stuff {
    my ($self,%arg) = @_;
    # ...
    my $from_private = $self->$_private->(@args);    # or
    my $more_private = $_private->($self,@args);
}

语法很奇怪,但肯定会警告用户它是一个私有方法.这使得子类很难继承,这要归功于mob强调这一点.

第二次调用使用$_private作为函数而不是方法,因此我们必须在需要时传递对象.这进一步警告不要使用它.然后它也没有经历正常的方法查找过程(因此稍微快一点),这是一个很好的意识.

关于究竟是什么问题,我有点不确定.

如果是关于是否在代码中使用“私有”子程序,那么实际上没有公认的最佳实践.它们非常有用,但它们并非真正私密.我自由地使用它们.

完整的答案是使用Moose或Moo,或其他一些模块.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读