Java'da soyut bir sınıf gibi davranan Moose :: Role sınıfını uygulamaya çalışıyorum. Rolde bazı yöntemleri uygulamak istiyorum, ama sonra bu yöntemleri somut sınıflarda geçersiz kılma yeteneğine sahip olmak istiyorum. Bunu, sınıfları genişletirken işe yarayan aynı stili kullanarak denerseniz, Cannot add an override method if a local method is already present
hatasını aldım.Moose :: Rolünde bir alt nasıl geçersiz kılınır?
Benim soyut sınıf:
package AbstractClass;
use Moose::Role;
sub my_ac_sub {
my $self = shift;
print "In AbstractClass!\n";
return;
}
1;
Benim beton sınıfı: o zaman
package Class;
use Moose;
with 'AbstractClass';
override 'my_ac_sub' => sub {
my $self = shift;
super;
print "In Class!\n";
return;
};
__PACKAGE__->meta->make_immutable;
1;
Ve:
use Class;
my $class = Class->new;
$class->my_ac_sub;
ben yanlış mı yapıyorum İşte bir örnek? Yapmaya çalıştığım şey farklı bir şekilde yapılması gerekiyor mu? Yapmamam gereken şey ne yapmaya çalışıyor?
Soyut bir sınıfı modellemek için soyut bir sınıf kullanın! Bu basit bir şekilde yapıyı imkansızlaştırmanızı gerektirir (yani bir hata veren bir BUILDALL verin). – amon
Muhtemelen bunu yapmanın Moose yolu, "my_ac_sub" gerektirir, "Rol", "değil", "sanal" yöntemidir. Moose :: Role daha sonra mevcut bir yöntemle oluşturulduğunu kontrol edecek, –
Kodu çalıştırmayı denedim ve sonra 'sub my_ac_sub' ile geçersiz kılmayı değiştirdim ve aniden beklendiği gibi çalıştı. "Düzelt" ile ilgili bir sorun var mı? (Feragatname: Moose'a yeniyim). – Dallaylaen