从groovy列表中逐个返回项

从groovy列表中逐个返回项,groovy,Groovy,我是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

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

我想看看:

此代码的第一次调用返回blog 1,函数的第二次调用返回blog 2等


如何解决这个问题?

您正在描述一个
迭代器

如果您想要一个封装迭代器并处理列表结尾的闭包,则可以执行以下操作:

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%确定这是您想要的,但很难从问题中辨别…

您正在描述一个
迭代器

如果您想要一个封装迭代器并处理列表结尾的闭包,则可以执行以下操作:

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%确定这就是你想要的,但很难从问题中判断…

你需要改变

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()
你需要改变

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

你能更好地解释这个问题吗?我无法从上面的代码中看出您希望得到什么或看到什么…您能更好地解释这个问题吗?我无法从上面的代码中看到您希望返回或看到的内容。。。