В Ruby класс никогда не загружается полностью. Вы можете открыть его, когда захотите.
class A
def method_in_a
…
end
end
Вы можете сделать это позже, независимо от того, где находится ваш код (даже в другом файле исходного кода).
class A
alias :aliased_method_in_a :method_in_a
end
или вы можете сделать это так, как написали (что в точности совпадает с предыдущим кодом)
A.class_eval do
alias :aliased_method_in_a :method_in_a
end
Как вы указали, # method_in_a должен существовать в тот момент, когда вы его называете. Чтобы убедиться, что это правда, вы можете сделать
require "file_of_class_a"
перед тем, как сделать псевдоним. Если вы не знаете, когда будет создан метод A # method_in_a, вы можете сделать
class A
def self.method_added(name)
alias :aliased_method_in_a :method_in_a if name == :method_in_a
end
end
A.method_added автоматически вызывается всякий раз, когда метод в A определен.