Юлия: Структурирование кода с множеством разных, но связанных вариантов алгоритмов

Я ищу элегантный способ переупорядочить мой код. Для разработки решателей у вас может быть много разных опций с одинаковыми настройками. Например, на высоком уровне код выглядит примерно так:

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

Ранее, когда я быстро создавал прототипы, я вставлял решающие алгоритмы прямо в код. Тем не менее, по мере того, как я добавляю теги на все больше и больше алгоритмов, это становится беспорядочным (особенно, когда некоторые содержат сотни строк кода), и поэтому я хочу поместить эти вызовы в отдельную функцию. Тем не менее, я хочу, чтобы они по сути были тем же, что и блок кода: доступ к одной и той же области действия, побочные эффекты и т. Д.

Я думал об использовании макроса для этого, но так как они имеют глобальный масштаб, это казалось неправильным решением. Вложенные функции выглядят так, как будто они могут быть выполнимыми, но я должен определить их в верхней части решателя (и я намеревался не делать этого, чтобы обеспечить высокий уровень читаемости алгоритма высокого уровня), и есть проблемы с определением объема вложенной функции во вложенной функции (для частей, которые повторяются только в некоторых алгоритмах!). Я мог бы просто определить это как другую функцию, не пытаясь сохранить ту же самую область, но тогда это было бы уродливо с параметрами длинного следа (с каждым алгоритмом, имеющим те же самые параметры!)

Что такое хороший способ организовать такой код? Есть ли более юлианский подход к этой проблеме?

Ответы на вопрос(3)

Ваш ответ на вопрос