首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在客户端希望访问$object->{private_variable}数据的多态情况下,使用驼鹿对对象进行编码

在客户端希望访问$object->{private_variable}数据的多态情况下,使用驼鹿对对象进行编码
EN

Stack Overflow用户
提问于 2011-09-17 05:11:22
回答 1查看 275关注 0票数 2

我知道,虽然Moose对象的内部表示(理所当然)是未定义的。然而,在几乎所有的情况下,它都将是一个基本的有福的hashref。在创建新对象时,如果遗留代码希望通过从受祝福的散列($object->{attribute})中获取对象属性来访问对象属性,而不是通过方法调用($object->attribute())将其封装到对象中,那么是否有办法显式地定义该对象需要存储为受祝福的hashref,以便属性正常工作?

更好的是,有没有什么模块可以将被祝福的对象从对象内部表示中解耦出来呢?似乎可以传递一个绑定的散列,该散列可以将集合定义的散列键绑定到针对实例化的元对象的方法调用中,因此即使一些旧代码将对象调用为$object->{attribute} = 'blahblah',所有的类型检查仍然可以完成。

EN

回答 1

Stack Overflow用户

发布于 2011-09-17 10:15:21

代码语言:javascript
复制
BEGIN {
    package MyMyMy;
    use Moose;
    has "watusi" =>
        is => "rw",
        isa => "Str";
}

my $mymymy = MyMyMy->new( watusi => "batusi" );
print $mymymy->watusi, $/;

$mymymy->watusi("woo-woo");
print $mymymy->{watusi}, $/;

$mymymy->{watusi} = "BAD DEV, BAD!";
print $mymymy->watusi, $/;

__END__    
batusi
woo-woo
BAD DEV, BAD!

我猜你已经知道这是怎么回事了。我发现很难想象Moose会以一种阻止它工作的方式改变内部结构。因此,尽管您试图做到这一点,但如果您的真正目标只是将一些遗留代码从转储中提取出来,我会说您可以依靠这一点,前提是您有一个真正的计划,可以继续前进,迁移到更现代的实践,并防止接口冲突。

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

https://stackoverflow.com/questions/7450434

复制
相关文章

相似问题

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