【发布时间】:2011-09-26 18:11:17
【问题描述】:
我想我已经为 perl Natives 准备好了属性处理程序!
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{}
LinkedList.append()
LinkedList.insert()
LinkedList.size()
LinkedList.has_children()
LinkedList.remove()
LinkedList.split()
有没有办法通过 Moose Attributes 处理对象的方法(不使用 MooseX)——类似于这个?
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',
},
如果有办法做到这一点,那就太好了,但我担心我可能在某处误解了如何或为什么为非本地属性创建处理程序。
想法?
【问题讨论】:
-
您是否有需要链表特征的原因(是否出于学习目的)?我之所以这么说是因为带有
Arraytrait 的ArrayRef类型可以处理你想要的一切(除了拆分)。在内部,perl 数组无论如何都是链表。但你的班级并不特别需要知道这一点。 -
是的,这只是一个学习练习——我用 LinkedList 作为一个简单的例子来了解 Moose 属性发生了什么
标签: perl oop object moose handlers