Mam klasy Moose, która ma być podklasy, a każda podklasa musi wdrożyć metodę "wykonaj". Chciałbym jednak zastosować modyfikator metody do metody execute w mojej klasie, tak aby dotyczyła ona metody execute we wszystkich podklasach. Modyfikatory metod nie są jednak zachowywane, gdy metoda jest nadpisywana. Czy istnieje sposób, aby upewnić się, że wszystkie podklasy mojej klasy będą miały mój modyfikator metody zastosowane do ich metod wykonywania?W języku Perl/Moose, w jaki sposób mogę zastosować modyfikator do metody we wszystkich podklasach?
Przykład: W nadrzędnej, mam to:
before execute => sub {
print "Before modifier is executing.\n"
}
Następnie w podklasie, że:
sub execute {
print "Execute method is running.\n"
}
Gdy metoda nazywa się wykonać, to nie powiedzieć nic na temat modyfikator "przed".
Hmm. Zapomniałem wspomnieć, że moja nadklasa faktycznie dziedziczy po innej klasie nie-Moose, która oczekuje, że jej podklasy będą deklarować metodę execute, więc augment/inner nie będzie działać. Ale zgadzam się, że to jest ogólne rozwiązanie. Jeśli chodzi o mój konkretny problem, okazało się, że mogę po prostu umieścić mój modyfikator na metodzie, która * wywołuje * execute, ponieważ ta metoda nigdy nie jest przedefiniowana lub przesłonięta w podklasach. Sądzę więc, że będę się z tym zgadzał. –
@Ryan Thompson, Nie próbowałem tego, myślę, że możesz umieścić prawie pustą klasę Łosia między rodzicem a dziećmi. Następnie umieść metodę wykonywania "hobbs" w klasie adaptera Moose, dziedzicz wszystko inne i gotowe. ** Ostrzeżenie: niesprawdzone, niesprawdzone, źle przemyślane tarcia ospałej osoby - używaj z najwyższą ostrożnością. ** – daotoad
@Ryan ale superklasa * nie * deklaruje metodę wykonania, a * jest * podklasą klasy, która oczekuje jego podklas do deklarowania metody wykonywania, więc wszystko jest koszerne z rozszerzeniem/wewnętrznym. Gdzie w drzewie metoda jest faktycznie dodana * powinna * być nieistotna. – hobbs