#!/usr/bin/perluse warnings;use strict;{ package Foo; use Moose; use MooseX::ClassAttribute; class_has Item => ( is => 'rw' );}{ package bar; use Moose; extends 'Foo';}Foo->Item(4);# This prints "4,4" as expected#print join( ",",Foo->Item(),bar->Item() ) . "\n"; bar->Item(5);# Would like this to print "4,5",but it prints "5,5"#print join( ",bar->Item() ) . "\n";
获得此效果的最佳方法是什么,使用MooseX::ClassAttribute还是其他方式?对于任何希望从中继承的类数据而言,这似乎是理想的行为.
解决方法 我知道你要求继承,但可能是角色可以帮助你以不同的方式解决你的问题.试着用一个简单的例子:
#!/usr/local/bin/perluse strict;use feature 'say';{ package Bomb; use Moose::Role; sub fuse { say "Bomb explode" } sub explode { say "Bomb fuse"}}{ package Spouse; use Moose::Role; sub fuse { say "Spouse explode"} sub explode { say "Spouse fuse"}}{ package PracticalJoke; use Moose; with 'Bomb' => { excludes => 'explode' },'Spouse' => { excludes => 'fuse' };}my $joke = PracticalJoke->new();$joke->fuse();$joke->explode();
通过“排除”,您可以准确控制应该发生的事情.
看看why roles are awsome
以及来自OvID的幻灯片约inheritance versus roles.
以上是内存溢出为你收集整理的perl – Moose类属性,其作用类似于Class :: Data :: Inheritable全部内容,希望文章能够帮你解决perl – Moose类属性,其作用类似于Class :: Data :: Inheritable所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)