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

Groovy中缺少生成器/yield关键字的解决方法,groovy,Groovy,想知道是否有一种方法可以像生成器一样使用sql.eachRow,在需要集合或迭代器的DSL上下文中使用它。我尝试使用的用例是流式JSON生成—我尝试做的是: def generator = { sql.eachRow { yield it } } jsonBuilder.root { status "OK" rows generator() } 您需要继续支持(或类似支持)才能在一定程度上实现此功能。Groovy没有continuations,JVM也没有。通常情况下,延续传递样式是可

想知道是否有一种方法可以像生成器一样使用
sql.eachRow
,在需要集合或迭代器的DSL上下文中使用它。我尝试使用的用例是流式JSON生成—我尝试做的是:

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

您需要继续支持(或类似支持)才能在一定程度上实现此功能。Groovy没有continuations,JVM也没有。通常情况下,延续传递样式是可行的,但接下来每个方法都必须支持它,当然它不支持。所以我看到的唯一方法就是使用线程或类似的东西来临时解决问题。所以,也许这样的事情对你有用:

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

我不是说,这是一个好的解决方案,只是一个随机的消费者生产者为您的问题工作。

然而,JVN有JRuby和JPython——所以它可以做到。这两种语言都有
产量