gpt4 book ai didi

perl - 为什么我可以将类名用作 Moose 类型,而不能用作类型联合的一部分?

转载 作者:行者123 更新时间:2023-12-03 23:32:55 25 4
gpt4 key购买 nike

我可以做这个:

package Foo; 
use Moose;

has 'time' => (
is => 'rw',
isa => 'DateTime'
);

package main;
use DateTime;

my $a = Foo->new(time => DateTime->now);

但不是这个:
package Foo; 
use Moose;

has 'time' => (
is => 'rw',
isa => 'DateTime | Str'
);

package main;
use DateTime;

my $a = Foo->new(time => DateTime->now);

因为它引发了一个异常:
Could not locate type constraint (DateTime) for the union
at /opt/xt/xt-perl/lib/site_perl/5.8.8/Moose/Util/TypeConstraints.pm line 89

无需先定义子类型。为什么会这样,有没有办法解决它(除了定义一个检查“isa”的子类型)?

最佳答案

当 Moose 创建一个类型联合时,它必须知道联合的所有组件。在这种情况下,它还不知道 DateTime 类型。但是,当您在 Moose 中创建一个属性并且 Moose 无法识别该类型时,它会假设您需要 isa 中字符串的类类型。就是这样做。您只需加载 Moose::Util::TypeConstraints 即可解决您的问题和做

class_type 'DateTime';

关于perl - 为什么我可以将类名用作 Moose 类型,而不能用作类型联合的一部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5196294/

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