如何在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,或其他一些模块. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |