Sınıflar kendi ana sınıfları özelliklerini devralabilir. Ama bazen bir nitelik, bir üst nesneden değerini miras edebilmek istiyorum. CSS stilleri HTML nasıl Örneğin, bu.
MooseX :: AttributeTree size sınıfında herhangi bir öznitelik için TreeInherit özelliği uygulamak için izin veren bir Perl modülü. & Nbsp; Bu niteliğin erişimci yöntemi çalışma şeklini değiştirir. Niteliğin değerini okurken hiçbir değer bu nesne özellik için ayarlanmış olup olmadığını, erişgeç (kendisi miras olabilir) üst nesneden değeri dönecektir.
Üst nesne, alt nesne olarak aynı tip olması gerekmez, ama (bir fetch_method tedarik sürece) niteliğin erişimci yöntemi olarak aynı adı taşıyan bir yöntem olmalıdır. (Ebeveynin yöntemi bir nitelik erişimci yöntem olabilir, ama olmak zorunda değildir.) Ana doğru bir yöntem yoksa, çocuk onu aramak için çalışırsa, bir çalışma zamanı hatası alırsınız.
Varsayılan olarak, MooseX :: AttributeTree nesnenin üst yöntemini çağırarak üst nesne almak için bekliyor. Ancak, TreeInherit özellik uygun parent_link geçirerek bağlantıyı almak için herhangi bir yöntemi kullanabilirsiniz:
& Nbsp; sahip atası => (
& Nbsp; => 'rw' olduğunu,
& Nbsp; isa => 'Object',
& Nbsp; weak_ref => 1,
& Nbsp);
& Nbsp; => (değerine sahip
& Nbsp; => 'ro' olduğunu,
& Nbsp; özellikleri => [TreeInherit => {parent_link => 'atası'}],
& Nbsp);
Yöntem undef dönerse, o zaman miras durur ve erişimci normal bir erişimci gibi davranacaktır. (Normalde, parent_link bir nitelik Erişimci yöntemin adı olacaktır, ama olmak zorunda değildir.)
Her bir alt nesne miras isteyebilirsiniz özniteliği için üst nesne ayrı bir yöntem olması için Bazen uygun değil. Bu durumda, TreeInherit özelliği bir fetch_method sağlayabilmektedir.
& Nbsp; vardır other_value => (
& Nbsp; => 'ro' olduğunu,
& Nbsp; özellikleri => [TreeInherit => {fetch_method => 'get_inherited'}]
& Nbsp);
Fetch_method ile, miras değeri gelecek
& Nbsp; $ öz> veli> ('other_value') get_inherited;
yerine her zamanki
& Nbsp; $ öz> veli> other_value ();
Senin nitelik bir yüklem yöntemi varsa, bu özellik o nesne üzerinde ayarlanmış olup olmadığını bildirir. yüklem, bir ebeveynden gelen olabilecek değer hiçbir bilgiye sahip. Bu $ nesneye ki> has_value return false olabilir anlamına gelse $ nesneye olsa> (ebeveynden gelen) bir değer dönecekti değer.
Aynı şekilde, niteliğin en net yöntemi (varsa) sadece bu nesne üzerinde niteliği açacak ve bir üst nesne etkilemez asla.
ÖZET
& Nbsp; paket Sınıfım;
& Nbsp; Moose kullanın;
& Nbsp) (MooseX :: AttributeTree kullanma;
& Nbsp; => (üst vardır
& Nbsp; => 'rw' olduğunu,
& Nbsp; isa => 'Object',
& Nbsp; weak_ref => 1,
& Nbsp);
& Nbsp; => (değerine sahip
& Nbsp; => 'rw' olduğunu,
& Nbsp; özellikleri => [qw / TreeInherit /],
& Nbsp;);
Gereksinimler :
- Perl
Yorum Bulunamadı