Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 角色和代码可读性_Perl_Moose_Moo - Fatal编程技术网

Perl 角色和代码可读性

Perl 角色和代码可读性,perl,moose,moo,Perl,Moose,Moo,使用角色的改进(Moo::Role或Role::Tiny或其他) 而不仅仅是从mixin类显式导入函数 use Some::Role qw/some_roles_method/; ... some_roles_method(); 数量众多,包括增加的灵活性、更少的簿记(特别是当有很多方法被导入时),以及不覆盖现有方法 但是一个很大的缺点是,如果您在阅读代码时遇到了某些角色\u方法()的提及,并且您想阅读函数,那么就不知道该去哪里。您所能知道的是,它没有在这个文件中定义 有什么好的策略来处理这个

使用角色的改进(Moo::Role或Role::Tiny或其他)

而不仅仅是从mixin类显式导入函数

use Some::Role qw/some_roles_method/;
...
some_roles_method();
数量众多,包括增加的灵活性、更少的簿记(特别是当有很多方法被导入时),以及不覆盖现有方法

但是一个很大的缺点是,如果您在阅读代码时遇到了
某些角色\u方法()
的提及,并且您想阅读函数,那么就不知道该去哪里。您所能知道的是,它没有在这个文件中定义


有什么好的策略来处理这个问题吗?我是唯一一个烦恼的人吗?

我能想到的唯一一件事,也是我偶尔会做的一件事,就是用你的语言彻底记录每件事。但这当然需要很多纪律

use Moo;
with 'Role::Reader', 'Role::Writer';

# ...

=head1 METHODS

=head2 frobnicate

Frobnicates the foo.

=cut

sub frobnicate { ... }

=head2 write_cheque

This method is documented in L<Role::Writer>.

=head2 write_autograph

This method is documented in L<Role::Writer>.

=head2 read_mind

This method is documented in L<Role::Reader>.

=head2 read_book

This method is documented in L<Role::Reader>.

=cut

1; 
使用Moo;
使用“Role::Reader”、“Role::Writer”;
# ...
=总目1方法
=第2类浮点数
使食物起泡。
=切割
子Frobnite{…}
=总目2开支票
该方法记录在L。
=头2写签名
该方法记录在L。
=头2读心
该方法记录在L。
=头2读本
该方法记录在L。
=切割
1.

这不是角色中唯一的角色(没有双关语)。例如,它可以派上用场。如果你不相信这些模块提供的糖,那么就不是讨论它的地方。考虑到它的名称,唯一可以去的地方就是包(类)。然后在那里用查找
,并查看角色的包名。这应该不是什么大问题?鉴于您的代码片段,让我这样说以防万一——角色与类一起使用,并被类吸收(参见示例)。那么定位方法就不成问题了。有没有工具可以自动定位方法的“源”?@Ed。你能更具体一点吗?你说的是对一个对象的内省,以区分哪个方法代码来自哪个文件和行?我想是的,或者至少来自哪个类?@Ed。出于什么目的?当你有一个对象时,你可以检查它的方法。
use Moo;
with 'Role::Reader', 'Role::Writer';

# ...

=head1 METHODS

=head2 frobnicate

Frobnicates the foo.

=cut

sub frobnicate { ... }

=head2 write_cheque

This method is documented in L<Role::Writer>.

=head2 write_autograph

This method is documented in L<Role::Writer>.

=head2 read_mind

This method is documented in L<Role::Reader>.

=head2 read_book

This method is documented in L<Role::Reader>.

=cut

1;