class A
do_something_from_b
def method_in_a
end
end
module B
def self.included base
base.extend ClassMethods
end
module ClassMethods
def do_something_from_b
A.class_eval do
alias_method :aliased_method_in_a, :method_in_a
end
end
end
end
A.send(:include, B)
Ten kod nie powiedzie się, ponieważ kiedy do_somethind_from_b
jest wywoływana, method_in_a
jeszcze nie istnieje.Uruchamianie kodu po klasie jest w pełni załadowany
Więc czy jest jakiś sposób, aby podłączyć do class A
po to zostało w pełni załadowany, bez oddanie wezwanie do_something_from_b
na koniec class A
?
Edycja: Jak wskazano, jest coś nie tak z kodem, ale to nie ma znaczenia. Chcę tylko zilustrować, co chcę osiągnąć, po uruchomieniu kodu po klasa jest zamknięta (nie ma znaczenia, że można ją ponownie otworzyć do woli). A teraz wiem, że to prawdopodobnie niemożliwe.
Dzięki!
Chciałbym zasugerować, aby opublikować działający przykład, z komentarzem "Jak to zrobić, aby praca". W tym przypadku powinna to być tylko jedna linia, ale ten kod wydaje się być łamany na różne sposoby ... – DigitalRoss
Klasy ruby są otwarte, więc nigdy nie ma czasu, kiedy klasa jest w pełni załadowana. –
Sam, dzięki za przypomnienie. Myślę więc, że z tego powodu niemożliwe jest robienie tego, co chciałem. – Ivan