首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态Moo对象方法更改

动态Moo对象方法更改
EN

Stack Overflow用户
提问于 2013-06-11 14:34:28
回答 1查看 628关注 0票数 2

我使用Moo作为我的OO引擎,并且我想在运行时改变一些实例的行为。我需要添加新的方法并更改现有的方法。

对于Moo,这是可能的吗?如果没有,我如何才能做到这一点?

EN

回答 1

Stack Overflow用户

发布于 2013-06-11 21:25:11

您可以使用Moo:Role完成此操作(有关详细信息,请参阅Role::TinyClass::Method::Modifiers )。例如:

代码语言:javascript
复制
use 5.10.1;

package Foo {
    use Moo;
    has a => ( is => 'rw' );
    sub m1 { return "m1" }
}

package Foo::Role {

    use Moo::Role;

    sub m2 { return "m2" }

    around 'm1' => sub {
        # original Foo::m1
        my $orig = shift;
        return "wrapped: " . $orig->(@_);
    }
}

use Role::Tiny;

my $foo = Foo->new;
say $foo->m1;
Role::Tiny->apply_roles_to_object( $foo, 'Foo::Role' );
say $foo->m2;
say $foo->m1;

my $boo = Foo->new;

say $boo->m1;
say $boo->m2;

你会得到:

m1 m2 wrapped: m1 m1无法通过包"Foo“在moo.pm第49行找到对象方法"m2”。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17037844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档