package logrole;use Moose::Role;use POSIX;use namespace::autoclean;package otherrole;use Moose::Role;use file::Temp;use namespace::autoclean;package myclass;use Moose;use namespace::autoclean;with 'logrole','otherrole'; package main;use strict;use warnings;use myclass;
运行这个给出:
Due to method name conflicts in roles 'logrole' and 'otherrole',the methods 'SEEK_CUR','SEEK_END',and 'SEEK_SET' must be implemented or excluded by 'myclass' at /home/user/perl5/perlbrew/perls/perl-5.22.1/lib/site_perl/5.22.1/x86_64-linux/Moose/Exporter.pm line 419Moose::with('logrole','otherrole') called at roles.pl line 29
根据docs,你可以在使用这样的角色时排除方法名称:
package logrole;use Moose::Role;use POSIX;use namespace::autoclean;package otherrole;use Moose::Role;use file::Temp;use namespace::autoclean;package myclass;use Moose;use namespace::autoclean;with 'logrole','otherrole' => { -excludes => ["SEEK_CUR","SEEK_END","SEEK_SET" ] };package main;use strict;use warnings;use myclass;
这解决了名称冲突,但是这个解决方案的问题是尝试在otherrole中导入POSIX会产生数百个名称冲突,因此在模块myclass中排除所有这些的修复似乎非常混乱.
如何导入(或写入)这些角色以避免方法名称冲突?
解决方法 namespace::autoclean不会删除方法,它信任 Class::MOP::Class的get_method_List来返回它们.令人困惑的是,它返回POSIX模块中的所有常量.如果将namespace :: autoclean切换到namespace::clean,则问题就消失了.
总结以上是内存溢出为你收集整理的perl – Moose角色中的方法名称冲突全部内容,希望文章能够帮你解决perl – Moose角色中的方法名称冲突所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)