gpt4 book ai didi

perl - Moose 角色中的方法名称冲突

转载 作者:行者123 更新时间:2023-12-04 19:29:36 26 4
gpt4 key购买 nike

我想要实现的是创建一个导入多个角色的 Moose 类。这是我多年来一直在做的事情,没有任何问题,尽管我目前坚持为什么下面的简单示例会产生方法名称冲突。

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 419
Moose::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;

这解决了名称冲突,但此解决方案的问题是尝试导入 POSIXotherrole产生数百个名称冲突,因此在模块 myclass 中排除所有这些的修复看起来很乱。

如何导入(或编写)这些角色以避免方法名称冲突?

最佳答案

namespace::autoclean不删除方法,它信任 Class::MOP::Classget_method_list归还他们。令人困惑的是,它返回 POSIX 模块中的所有常量。

如果切换namespace::autocleannamespace::clean ,问题就解决了。

关于perl - Moose 角色中的方法名称冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45763717/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com