gpt4 book ai didi

groovy - Groovy中缺少生成器/yield关键字的解决方法

转载 作者:行者123 更新时间:2023-12-04 04:34:39 26 4
gpt4 key购买 nike

想知道是否有一种方法可以像生成器一样使用sql.eachRow在需要Collection或Iterator的DSL上下文中使用它。我要使用的用例是流JSON生成-我想做的事情是这样的:

def generator = { sql.eachRow { yield it } }
jsonBuilder.root {
status "OK"
rows generator()
}

最佳答案

您需要持续支持(或类似的支持)才能在某种程度上起作用。 Groovy没有延续,JVM也没有。通常,延续传递样式可以工作,但随后eachRow方法必须支持该方法,但它当然不支持。因此,我看到的唯一方法是使用线程或类似方法的临时解决方案。因此,也许类似的方法对您有用:

def sync = new java.util.concurrent.SynchronousQueue()
Thread.start { sql.eachRow { sync.put(it) } }
jsonBuilder.root {
status "OK"
rows sync.take()
}

我并不是说这是一个很好的解决方案,只是解决您的问题的一个随机的消费者-生产者变通方法。

关于groovy - Groovy中缺少生成器/yield关键字的解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30743472/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com