perlネイティブの属性ハンドラがダウンしていると思います!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
うん、それはちょうど学習の練習だった - 私はMoose属性で何が起こっていたかを理解するための簡単な例としてLinkedListを使用した – qodeninja