Julia: Strukturieren von Code mit vielen verschiedenen, aber verwandten Algorithmusoptionen
Ich suche nach einer eleganten Möglichkeit, meinen Code neu zu ordnen. Für die Entwicklung von Solvern stehen Ihnen viele verschiedene Optionen zur Verfügung, die das gleiche Setup haben. Auf hoher Ebene sieht der Code beispielsweise so aus:
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
Zuvor habe ich, wenn ich schnell Prototypen erstellt habe, die Lösungsalgorithmen direkt in den Code eingefügt. Da ich jedoch immer mehr Algorithmen verarbeite, wird dies unübersichtlich (besonders wenn es sich um Hunderte von Codezeilen handelt), und ich möchte diese Aufrufe als separate Funktion platzieren. Ich möchte jedoch, dass sie im Wesentlichen dasselbe sind wie der Codeblock: Zugriff auf denselben Bereich, Nebenwirkungen usw.
Ich habe darüber nachgedacht, ein Makro dafür zu verwenden, aber da sie auf globaler Ebene bewertet wurden, schien es die falsche Lösung zu sein. Verschachtelte Funktionen scheinen machbar zu sein, aber ich muss sie oben im Solver definieren (und ich wollte dies nicht tun, um den Algorithmus auf hoher Ebene lesbar zu halten), und es gibt Probleme beim Definieren einer verschachtelten Funktion innerhalb einer verschachtelten Funktion (für Teile, die sich nur in einigen Algorithmen wiederholen!). Ich könnte dies einfach als eine andere Funktion definieren, ohne zu versuchen, den gleichen Gültigkeitsbereich beizubehalten, aber dann wäre es hässlich, wenn die Parameter eines langen Pfads (wobei jeder Algorithmus die gleichen Parameter hat!)
Was ist ein guter Weg, um diese Art von Code zu organisieren? Gibt es eine julianischere Herangehensweise an dieses Problem?