Last active
March 26, 2018 13:50
-
-
Save klopp/e290b01571132f5014ba15b989bd2d52 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| package AA; | |
| sub func { print "AA\n" } | |
| package BB; | |
| use parent 'AA'; | |
| sub func { print "BB\n"; shift->SUPER::func(@_); } | |
| package CC; | |
| use parent 'AA' | |
| sub func { print "CC\n"; shift->SUPER::func(@_); } | |
| package DD; | |
| use parent qw/BB CC/; | |
| sub func { print "DD\n"; shift->SUPER::func(@_); } | |
| # | |
| # В каких классах и в каком порядке будут вызваны функции func, если вызвать DD->func ? | |
| # | |
| # DD, BB, AA | |
| # | |
| # По какому принципу мы должны построить наследование, если нам необходимо, | |
| # чтобы при вызове DD->func, были вызваны функции по всех этих классах, и | |
| # не меняя иерархию наследования? | |
| # | |
| # См. mro. И вместо | |
| # | |
| # shift->SUPER::func(@_) | |
| # | |
| # вызывать | |
| # | |
| # shift->next::method(@_); | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment