Julia: estructurando código con muchas opciones de algoritmos diferentes pero relacionadas

Estoy buscando una forma elegante de reorganizar mi código. Para los solucionadores en desarrollo, lo que sucede es que puede tener muchas opciones diferentes que tienen la misma configuración. Por ejemplo, en un nivel alto, el código se ve así:

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

Anteriormente, cuando creaba prototipos rápidamente, colocaba los algoritmos de resolución directamente en el código. Sin embargo, como estoy etiquetando más y más algoritmos, esto se está volviendo desordenado (especialmente cuando algunos tienen cientos de líneas de código) y por eso quiero poner esas llamadas como una función separada. Sin embargo, quiero que sean esencialmente lo mismo que poner el bloque de código allí: acceder al mismo alcance, tener efectos secundarios, etc.

Pensé en usar una macro para esto, pero dado que evaluaron el alcance global, parecía la solución incorrecta. Parece que las funciones anidadas pueden ser factibles, pero tengo que definirlas en la parte superior del solucionador (y mi intención era no hacerlo para mantener legible el algoritmo de alto nivel) y existen problemas con el alcance de una función anidada dentro de una función anidada (¡para partes que se repiten solo en algunos de los algoritmos!). Simplemente podría definir esto como otra función sin tratar de mantener el mismo alcance, pero sería feo con parámetros de seguimiento largos (¡con cada algoritmo teniendo los mismos parámetros!)

¿Cuál es una buena manera de organizar este tipo de código? ¿Hay un enfoque más juliano para este problema?

Respuestas a la pregunta(3)

Su respuesta a la pregunta