2010-12-06 29 views
0

est-il possible de créer un ensemble de variables à partir d'une liste de valeurs en utilisant une fermeture? la raison de demander est de créer une fonctionnalité récursive basée sur une liste de (disons) deux trois quatre ou cinq parties Le code ici bien sûr ne fonctionne pas, mais tous les pointeurs serait helpful.thenfermeture groovy instancier des variables

def longthing = 'A for B with C in D on E' 
//eg shopping for 30 mins with Fiona in Birmingham on Friday at 15:00 
def breaks = [" on ", " in ", "with ", " for "] 
def vary = ['when', 'place', 'with', 'event'] 

i = 0 
line = place = with = event = "" 
breaks.each{ 
shortline = longthing.split(breaks[i]) 
longthing= shortline[0] 
//this is the line which obviously will not work 
${vary[i]} = shortline[1] 
rez[i] = shortline[1] 
i++ 
} 
return place + "; " + with + "; " + event 
// looking for answer of D; C; B 

EDIT >>

Oui, je suis en train de trouver un moyen de nettoyer groovy cette, que je dois faire après chaque boucle la

len = rez[3].trim() 
if(len.contains("all")){ 
len = "all" 
} else if (len.contains(" ")){ 
len = len.substring(0, len.indexOf(" ")+2) 
} 
len = len.replaceAll(" ", "") 
with = rez[2].trim() 
place = rez[1].trim() 
when = rez[0].trim() 
event = shortline[0] 

et si je décide d'ajouter un autre élément à la liste (ce que je viens de faire) je dois me rappeler qui [i] il est de l'extraire avec succès

Ceci est la partie des travailleurs pour ensuite les dates/heures l'analyse syntaxique pour ensuite utiliser jChronic pour convertir le texte naturel en info Calendrier Grégorien Je peux alors définir un événement dans un calendrier Google

+0

Je relis votre question et je ne comprends pas ce que vous essayez de faire. Je pense que ma réponse vous aidera, mais je pourrais être plus utile si vous pouvez donner un exemple de ce que sera le résultat de votre opération. – hvgotcodes

Répondre

1

Que diriez-vous:

def longthing = 'A for B with C in D on E' 
def breaks = [" on ", " in ", "with ", " for "] 
def vary = ['when', 'place', 'with', 'event'] 
rez = [] 
line = place = with = event = "" 

breaks.eachWithIndex{ b, i -> 
    shortline = longthing.split(b) 
    longthing = shortline[0] 
    this[vary[i]] = shortline[1] 
    rez[i] = shortline[1] 
} 
return place + "; " + with + "; " + event 
+0

Fab ... le peu qui me manquait était le this [vary [i]] - merci –

0

Lorsque vous utilisez une fermeture avec une liste et "each", groovy boucles sur l'élément dans la liste, en mettant la valeur dans la liste dans la variable "it". Cependant, puisque vous voulez aussi garder une trace de l'indice, il y a un eachWithIndex groovy qui passe aussi dans l'index

http://groovy.codehaus.org/GDK+Extensions+to+Object

donc quelque chose comme

breaks.eachWithIndex {item, index -> 
    ... code here ... 
}