2010-12-06 3 views
0

Можно ли создать набор переменных из списка значений с помощью закрытия? причина просят это, чтобы создать некоторую рекурсивную функциональность на основе списка (скажем) два три четыре или пять частей Код, здесь, конечно, не работает, но любые указатели будут helpful.thengroovy замыкание переменных экземпляра

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 >>

Да Я пытаюсь найти groovier способ очистить это, что я должен делать после каждого цикла

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] 

и если я решу добавить еще один элемент в списке (который я только что сделал), я должен помнить который [я] это, чтобы извлечь его успешно

Это работник часть тогда разбора даты/времени, чтобы затем использовать jChronic преобразовать естественный текст в григорианском информацию календаря, так что я могу затем установить событие в календарь Google

+0

Я перечитываю ваш вопрос, и я не понимаю, что вы пытаетесь сделать. Я думаю, что мой ответ поможет вам, но я могу быть более полезным, если вы можете привести пример того, каким будет результат вашей операции. – hvgotcodes 2010-12-06 15:39:58

ответ

1

Как насчет:

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 ... бит, который мне не хватало, это [изменить [i]] - спасибо – 2010-12-06 16:48:38

0

, когда вы используете закрытие со списком и «каждый», groovy перебирает элемент в списке, помещая значение в список в переменную «it». Однако, так как вы хотите, чтобы следить за индексом, есть заводной eachWithIndex, который также проходит в индексе

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

так что-то вроде

breaks.eachWithIndex {item, index -> 
    ... code here ... 
} 
Смежные вопросы