我对Groovy很陌生,而且我有点挣扎。我有一个List,我希望每次调用函数
时返回列表中的项目1def 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%确定你想要的是什么,从问题中很难说出来......
答案 1 :(得分: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()