Tôi đã có thuộc tính lớp trong lớp Moose, nhưng tôi muốn nó hoạt động như Class::Data::Inheritable dưới dạng lớp con ghi đè giá trị của giá trị gốc. Tức là, lớp con kế thừa giá trị của cha mẹ cho đến khi setter được gọi trên lớp con, tại thời điểm đó các giá trị trở nên khác biệt. ví dụ.Thuộc tính lớp Moose hoạt động như Lớp :: Dữ liệu :: Thừa kế
#!/usr/bin/perl
use warnings;
use strict;
{
package Foo;
use Moose;
use MooseX::ClassAttribute;
class_has Item => (is => 'rw');
}
{
package Bar;
use Moose;
extends 'Foo';
}
Foo->Item(4);
# This prints "4, 4" as expected
#
print join(", ", Foo->Item(), Bar->Item()) . "\n";
Bar->Item(5);
# Would like this to print "4, 5", but it prints "5, 5"
#
print join(", ", Foo->Item(), Bar->Item()) . "\n";
Cách tốt nhất để có hiệu ứng này, với MooseX::ClassAttribute hoặc cách khác là gì? Có vẻ như hành vi mong muốn đối với bất kỳ lớp w/lớp dữ liệu nào được mong đợi sẽ được kế thừa từ đó.
FWIW Class :: Data :: Inheritable không xung đột với Moose. – Schwern
Schwern: Điều đó có thể đúng, mặc dù các đối tượng Moose phải thừa kế từ Moose :: Object, do đó ít nhất sẽ có nhiều thừa kế liên quan, điều này làm tôi khó chịu. Ngoài ra, bạn không nhận được bất kỳ thuộc tính khai báo thuộc tính Moose nào mà MooseX :: ClassAttribute cung cấp cho bạn. –