2016-09-08 48 views
0

對於Groovy來說,我很新,我正在努力一點。我有一個名單,我想在列表1 1每個I調用函數時返回的項目從groovy列表中逐一返回項目

def list = [ 
    "blog1", 
    "blog2", 
    "blog3" 
] 
// Result variable for storing loop results. 
def result = '' 
// Closure to fill result variable with value. 
def createResult = { 
    if (!it) { // A bit of Groovy truth: it == 0 is false 
     result = '0' 
    } else { 
     result += it 
    } 
} 

// Groovy for-each loop. 
for (i in list) { 
    createResult(i) 
} 
return result 

現在我得到以下值:blog1blog2blog3

我想看看:

此代碼返回博客1的第一次調用,函數返回博客的第二個呼叫2等

如何解決這個問題?

+0

你能解釋一下這個問題比較好?我無法從上面的代碼中看到您期望回頭或看到的內容...... –

回答

3

你描述的Iterator

如果你想要一個包裝迭代器和處理列表的末端沒有異常的關閉,你可以這樣做:

def closure = { -> 
    def i = ['item1', 'item2', 'item3'].iterator(); 
    { -> i.hasNext() ? i.next() : null } 
} 

def clos = closure() 

println clos() 
println clos() 
println clos() 
println clos() 

它打印:

item1 
item2 
item3 
null 

不是100%確定這就是你想要的,但很難從問題中分辨出來......

0

您需要更改

result += it 

到:

result = it 

但最好使用迭代器:

def iter = list.iterator() 
def getListValue = {iterator -> 
    iterator.hasNext() ? iterator.next() : null 
} 
def createResult = getListValue.curry(iter) 

println createResult() 
println createResult() 
println createResult()