8

ArrayRef (読み取り専用) であり、オブジェクトによって内部的に操作される属性を持つ Moose クラスがあります。しかし、誰かがアクセサー メソッドを呼び出すと、参照ではなく配列 (またはリスト) を返すようにします。これにより、クラスのユーザーが行う逆参照の量が削減されるだけでなく、オブジェクトが使用している同じ参照を誤って改ざんすることができなくなります。

では、これを行う最善の方法は何ですか? なんらかの強制?

4

3 に答える 3

18

Moose::Meta::Attribute::Native::Trait::Arrayと委譲を使用します。

handles => { my_array => 'elements' }

(#moose の doy 経由)

auto_derefスカラーコンテキストでアクセサーを呼び出すと、参照を返すという望ましくない動作があります。

于 2009-12-07T18:31:54.517 に答える
6

を使用することはできますがauto-derefMoose::Manual::BestPracticesによると、これは最善の方法ではなく、代わりにMoose::Meta::Attribute::Nativeを使用してその機能を実現することを検討する必要があります。

于 2009-12-07T18:32:44.827 に答える
3

auto_derefオプションを使用します。

has my_field => (
    is => 'ro', isa => 'ArrayRef[Str]',
    auto_deref => 1,
    # rest of options...
);

式のスカラーまたはリスト コンテキストによっては、リーダー メソッドを使用するときに配列が返されない場合があることに注意してください。少し前に、間接参照を機能させるために、明示的に配列コンテキストを式に持ち込まなければならない状況に遭遇しました..見つけられたら、例を追加します.

于 2009-12-07T18:28:45.670 に答える