Julia: Estruturando código com muitas opções de algoritmo diferentes, mas relacionadas

Estou procurando uma maneira elegante de reorganizar meu código. Para desenvolver solucionadores, o que acontece é que você pode ter muitas opções diferentes com a mesma configuração. Por exemplo, em um nível alto, o código se parece com isso:

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, quando eu prototipava rapidamente, colocava os algoritmos do solucionador no código. No entanto, como estou etiquetando cada vez mais algoritmos, isso está se tornando confuso (especialmente quando há centenas de linhas de código) e, portanto, quero colocar essas chamadas como uma função separada. No entanto, quero que eles sejam basicamente a mesma coisa que colocar o bloco de código lá: acessar o mesmo escopo, ter efeitos colaterais etc.

Pensei em usar uma macro para isso, mas como elas avaliam no escopo global, parecia a solução errada. As funções aninhadas parecem que podem ser executáveis, mas eu tenho que defini-las no topo do solucionador (e minha intenção era não fazer isso para manter o algoritmo de alto nível legível) e há problemas com o escopo de uma função aninhada dentro de uma função aninhada (para partes que se repetem apenas em alguns dos algoritmos!). Eu poderia definir isso como outra função sem tentar manter o mesmo escopo, mas seria feio com parâmetros de trilha longa (com cada algoritmo tendo os mesmos parâmetros!)

Qual é uma boa maneira de organizar esse tipo de código? Existe uma abordagem mais juliana para esse problema?

questionAnswers(3)

yourAnswerToTheQuestion