加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl – Attribute is =>’可能[SomeSubtype]’返回Attribute

发布时间:2020-12-16 06:06:56 所属栏目:大数据 来源:网络整理
导读:我已经使用强制创建了子类型Birth_d,如下所示,我正在尝试将其与内置的Maybe类型结合使用,每个 Moose::Manual::Types. 我收到错误你不能强迫属性(birth_d),除非它的类型(Maybe [Birth_d])有强制.这是完整的测试代码: package Student;use Moose;use Moose::U
我已经使用强制创建了子类型Birth_d,如下所示,我正在尝试将其与内置的Maybe类型结合使用,每个 Moose::Manual::Types.

我收到错误你不能强迫属性(birth_d),除非它的类型(Maybe [Birth_d])有强制.这是完整的测试代码:

package Student;
use Moose;
use Moose::Util::TypeConstraints;

use DateTime::Format::MySQL;

class_type 'Birth_d',{ class => 'DateTime' };

coerce 'Birth_d',from 'Str',via { DateTime::Format::MySQL->parse_date( $_ ) };

has 'name' => (
  isa => 'Str',is => 'ro',);

has 'birth_d' => (
  isa => 'Maybe[Birth_d]',# This works:    isa => 'Birth_d'
  coerce => 1,);


package main;

use Test::More;

my $student = Student->new(
  name => 'Johnnie Appleseed',birth_d => '2015-01-01'
  );

is ( $student->birth_d->ymd(),'2015-01-01' );

my $student2 = Student->new(
  name => 'Foo Bar',birth_d => undef
  );

is( $student2->birth_d,undef );

替换isa => ‘is [Birth_d]’is isa => ‘birth_d’有效,但不是必需的.我需要使birth_d可选,如果没有提供,应该是undef.

我应该补充一点,我尝试使用MooseX :: Types将这个Birth_d类型放在一个单独的地方,但是发现它使用的裸字有点不正统,所以我慢慢退缩了.如果有意义的话,我愿意重新考虑它.

解决方法

我会发现没有Maybe [Birth_d]类型更有用,但只是使用Birth_d类型声明属性,而不是“required”设置.

这样,如果传入有效的String,它将被接受,无效的String将导致错误,并且不需要传递任何内容.

但是,您可以强制使用以下类型:

subtype 'MaybeBirth_d',as maybe_type(class_type('DateTime'));

coerce 'MaybeBirth_d',via { DateTime::Format::MySQL->parse_date( $_ ) };

has 'birth_d' => (
    isa => 'MaybeBirth_d',coerce => 1,);

我只是没有看到能够通过undef传递生日的价值 – 这比设置它更好吗?

我还建议不使用Moose :: Util :: TypeConstraints;没有驼鹿;在包的末尾,或者namespace :: autoclean;在开头,以及__PACKAGE __-> meta-> make_immutable;在学生班结束时.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读