У меня есть много методов, которые делают то же самое, но они должны быть определены каждый с определенным именем. Так что я попытался следующие внутри метода, который вызывает каждый отдельный format_
метод:define_method не возвращает никаких результатов
['street', 'postcode', 'email', 'type', 'subtype', 'dsc', 'duration'].each do |attribute|
define_method("self.format_#{attribute}") do |value|
return cleanup(value)
end
end
Раньше у меня был отдельный метод для каждого элемента в массиве, как, например:
def self.format_street value
return cleanup(value)
end
Как я могу получить первый блок для генерации методов для каждого элемента в массиве?
Вот новая реализация на основе ответа от Эндрю Маршалла:
def self.analyze_input! formatted_information, category
analyzed_information = {}
attributes = eval(category).attributes
['inst_number', 'name', 'head_of_department', 'street', 'city', 'phone', 'classification', 'sub_classification'].each do |attribute|
define_singleton_method(:"analyze_#{attribute}") do |value|
value
end
end
formatted_information.each do |key, value|
if attributes.include?(key)
analyzed_information[:"#{key}"] = send("analyze_#{key}", value)
end
end
end
Вы действительно хотите быть (пере) определение этих методов на каждом вызове 'analyze_input!'. Почему бы не определить все эти методы 'analysis_' вне этого метода, используя либо подход, предложенный ниже? –
Нет, я не хочу этого делать. Ошибка, к сожалению, такая же. – Severin