У меня есть два класса, и я хочу скопировать все методы из одного класса в другой. Некоторые методы не будут иметь аргументов, у некоторых будут аргументы, а некоторые будут иметь хеши в качестве аргументов. И я никогда не знаю заранее, какие будут. Поэтому я создал этот код, пока не понял, что он не учитывает аргументы. Есть ли способ получить список методов из класса, а затем клонировать их точно в другой класс?Скопировать все методы из одного класса в другой на лету
def partial(cls)
cls.instance_methods(false).each do |method_name|
define_method(method_name) do
cls.new.method(method_name.to_sym).call
end
end
end
методы создаются на лету, используя define_method в первом классе, так что я не могу просто использовать включаемый. Вышеприведенный код содержит cls, затем он находит все методы экземпляра, которые фактически записаны в этом классе, а не наследуемые, а затем создает новый метод с тем же именем. Когда этот метод вызывается, он фактически вызывает другой класс с его методом с тем же именем. Это прекрасно работает, если у меня нет аргументов. У меня была проверка состояния, чтобы увидеть, есть ли у нее аргументы, а затем он вызвал метод с аргументами, но он не очень хорошо обрабатывал хэши. Он сделал хэш как массив аргументов, чего я не хотел.
Мне было интересно, был ли простой способ буквально сказать: «Эй, вы знаете этот метод, что бы это ни было, буквально делайте то же самое для этого другого класса».
Я смущен тем, что вы хотите сделать. Вы говорите о методах экземпляра, но затем вы говорите: «вызывает другой класс с его методом с тем же именем». Это не сработает, если вы не отслеживаете состояние другого класса. – AShelly