J'ai vu ce nice blog post about a Scala continuations qui 'émule' une instruction GOTO
dans le langage Scala. (En savoir plus sur Continuations here)Comment l'instruction GOTO dans Groovy?
Je voudrais avoir la même chose dans le langage de programmation Groovy. Je pense que c'est possible dans un Groovy compiler phase transformation.
Je travaille sur un langage spécifique au domaine (DSL), et je préfère incorporé dans Groovy. Je voudrais avoir l'instruction GOTO
, car le langage DSL est un langage non structuré (et est généré à partir des diagrammes de workflow). J'ai besoin d'une instruction goto 'étiquetée', pas de numéros de ligne. Le langage DSL est un langage pour les définitions de workflow, et comme il n'y a pas de restrictions pour les flèches entre les nœuds, un goto
est nécessaire. (ou code illisible avec while
etc)
En tant que débutant de Groovy et Scala je ne sais pas Si je peux traduire la solution Scala à Groovy, mais je ne pense pas qu'il y ait des suites dans Groovy.
Je cherche un algorithme/code pour émuler des goto étiquetés dans Groovy. Un algorithme que j'avais à l'esprit utilise eval
à plusieurs reprises; faire le eval
lorsque vous êtes à un goto
. Le DSL est déjà évalué avec un eval
.
Je ne suis pas à la recherche d'un « tout » en boucle ou quelque chose, mais la traduction de ce code afin qu'il fonctionne (une autre syntaxe est pas un problème)
label1:
a();
b();
goto label1;
PS: je ne préférais pas la discussion si je devrais vraiment utiliser/vouloir l'instruction GOTO. Le DSL est un langage de spécification et ne fait probablement pas face aux variables, à l'efficacité, etc.
PS2: Un autre mot-clé puis GOTO
peut être utilisé.
Juste un sidenote, goto marqué peut être simulé plus facilement que par des suites ... –
@Gabriel: Alors pouvez-vous me donner des colles? – Julian
Non, je n'ai pas de colle:) ... je ne sais pas quelles contraintes votre DSL a vraiment et je ne connais pas beaucoup Groovy, mais une façon de gérer goto pourrait être d'avoir un tableau/une liste/une carte de fermeture constantes et une méthode exécutant index/clé en cours, qui peut être modifiée avec goto. –