我想用一个Moose::Util::TypeConstraints https://metacpan.org/pod/Moose::Util::TypeConstraints在我的应用程序中。
所以我在我的main.pl
main.pl
use Moose::Util::TypeConstraints;
subtype 'mySpecialType'
=> as 'Object'
=> where sub { $_->does('something') };
use noUse;
包装内noUse.pm
是使用的包,它使用类型约束
noUse.pm
package noUse;
use Use1;
use Use2;
1;
和我的包裹Use1
and Use2
正在处理类型约束
Use1.pm
package Use1;
use Moose;
has 'object1' => ( is => 'ro', isa => 'mySpecialType' );
1;
Use2.pm
package Use2;
use Moose;
has 'object2' => ( is => 'ro', isa => 'mySpecialType' );
1;
如果我跑main.pl
我收到此错误:
类型约束“mySpecialType”已在 Use1 中创建,无法在 /usr/lib/x86_64-linux-gnu/perl5/5.22/Moose/Util/TypeConstraints.pm 第 348 行的 main 中再次创建
Moose::Util::TypeConstraints::subtype('mySpecialType', 'HASH(0x227f398)', 'HASH(0x2261140)') 在 main.pl 第 10 行调用
是什么原因导致此错误以及如何修复它?
标准方法是use
来自需要的库的公共代码,而不是让它从主程序中辐射出来。
我的类型.pm
package MyTypes;
use Moose::Util::TypeConstraints;
subtype 'mySpecialType'
=> as 'Object'
=> where sub { $_->does('something') };
Use1.pm
package Use1;
use Moose;
use MyTypes;
has 'object1' => ( is => 'ro', isa => 'mySpecialType' );
1;
Use2.pm
package Use2;
use Moose;
use MyTypes;
has 'object2' => ( is => 'ro', isa => 'mySpecialType' );
1;
And main.pl
变得只是
use noUse;
noUse.pm
保持不变。
See 辛巴布克 https://stackoverflow.com/users/1331451/simbabque's answer https://stackoverflow.com/a/41551349/1030675为什么。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)