gpt4 book ai didi

perl - 在 Moose 中,如何判断一个对象的类是否是另一个对象类的子类?

转载 作者:行者123 更新时间:2023-12-04 22:08:23 28 4
gpt4 key购买 nike

假设我有两个对象 $obj1$obj2,它们都是 Moose 类的实例。我想知道以下哪一项适用:

  • $obj1 的类与 $obj2 的类相同;
  • $obj1 的类是 $obj2 的子类;
  • $obj1 的类是 $obj2 的父类(super class);
  • 两个对象的类都不是另一个对象的子类。

  • 我怎样才能做到这一点?

    最佳答案

  • $obj1 的类是否与 $obj2 的类相同?
    ref $obj1 eq ref $obj2;
  • $obj1 的类是 $obj2 的子类吗?
    $obj1->isa(ref $obj2);
  • $obj1 的类是 $obj2 的父类(super class)吗?
    $obj2->isa(ref $obj1);
  • 两个对象的类都不是另一个对象的子类。

    看上面。

  • 更新:

    回应有关在运行时应用的角色的评论:
    package My::X;

    use Moose; use namespace::autoclean;

    sub boo { }

    __PACKAGE__->meta->make_immutable;

    package My::Y;

    use Moose; use namespace::autoclean;

    extends 'My::X';

    __PACKAGE__->meta->make_immutable;

    package My::Z;

    use Moose::Role; use namespace::autoclean;

    requires 'boo';

    package main;

    use Test::More tests => 2;

    use Moose::Util qw( apply_all_roles );

    my $x = My::X->new;
    my $y = My::Y->new;

    ok($y->isa(ref $x), 'Before role was applied at runtime');

    apply_all_roles($x, 'My::Z');

    ok($y->isa(ref $x), 'After role was applied at runtime');

    输出:

    1..2
    ok 1 - 在运行时应用角色之前
    不行 2 - 在运行时应用角色之后
    # 在 C:\Temp\t.pl 第 36 行测试“在运行时应用角色之后”失败。
    # 看起来你没有通过 1 次测试 2 次。

    关于perl - 在 Moose 中,如何判断一个对象的类是否是另一个对象类的子类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3938622/

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