2
我认为我已经为perl Natives获得了属性处理程序!如何在Perl/Moose中为对象的方法创建属性处理程序
package tree;
has '_branches' => (
traits => ['Hash'],
is => 'rw',
isa => 'HashRef[Any]',
handles => {
_set_branch => 'set',
_is_branch => 'defined',
_list_branches => 'keys',
_branch => 'get'
},
trigger => sub {
my($self,$hash) = @_;
$self->_build_branch($hash);
}
);
sub _build_branch{
my($self,$hash);
# do stuff!
#return altered or coerced hash
return $hash;
}
你怎么看?
但是,让我们说,例如我有以下方法
LinkedList{}
LinkedList.append()
LinkedList.insert()
LinkedList.size()
LinkedList.has_children()
LinkedList.remove()
LinkedList.split()
有办法处理对象的方法通过驼鹿属性(不使用MooseX)在LinkedList对象 - 与此类似?
package Bucket;
has '_linkedlist' => (
traits => ['LinkedList'],
is => 'rw',
isa => 'LinkedListRef[Any]',
handles => {
_add_link => 'append',
_insert_link => 'insert',
_count_links => 'size',
_del_link => 'remove',
_split_at_link => 'split',
_has_sublinks => 'has_children',
},
这将是巨大的,如果有办法做到这一点,但我担心,也许我为什么或如何创建非本地属性处理器地方一些误解。
想法?
为什么你想要一个链表特质(是为了学习的目的)是否有一个原因?我之所以这么说是因为具有'Array'特性的'ArrayRef'类型可以处理您想要的所有内容(除了分割)。在内部,perl数组无论如何都是链表。但是你的班级并不特别需要知道这一点。 – stevenl
是啊,它只是一个学习练习 - 我用LinkedList作为一个简单的例子来理解Moose属性发生了什么 – qodeninja