Юлия: Структурирование кода с множеством разных, но связанных вариантов алгоритмов
Я ищу элегантный способ переупорядочить мой код. Для разработки решателей у вас может быть много разных опций с одинаковыми настройками. Например, на высоком уровне код выглядит примерно так:
function solver()
# Start by assigning a bunch of variables, preprocessing, etc.
...
# Choose and execute solve
if alg==1 doAlgorithm1()
elseif alg==2 doAlgorithm2()
elseif alg==3 doAlgorithm3()
end
# Postprocess and return
...
end
Ранее, когда я быстро создавал прототипы, я вставлял решающие алгоритмы прямо в код. Тем не менее, по мере того, как я добавляю теги на все больше и больше алгоритмов, это становится беспорядочным (особенно, когда некоторые содержат сотни строк кода), и поэтому я хочу поместить эти вызовы в отдельную функцию. Тем не менее, я хочу, чтобы они по сути были тем же, что и блок кода: доступ к одной и той же области действия, побочные эффекты и т. Д.
Я думал об использовании макроса для этого, но так как они имеют глобальный масштаб, это казалось неправильным решением. Вложенные функции выглядят так, как будто они могут быть выполнимыми, но я должен определить их в верхней части решателя (и я намеревался не делать этого, чтобы обеспечить высокий уровень читаемости алгоритма высокого уровня), и есть проблемы с определением объема вложенной функции во вложенной функции (для частей, которые повторяются только в некоторых алгоритмах!). Я мог бы просто определить это как другую функцию, не пытаясь сохранить ту же самую область, но тогда это было бы уродливо с параметрами длинного следа (с каждым алгоритмом, имеющим те же самые параметры!)
Что такое хороший способ организовать такой код? Есть ли более юлианский подход к этой проблеме?