2015-06-09 20 views
8

Bir koleksiyon varsa, bir Toplama veya Yineleyici'nin beklendiği bir DSL bağlamında kullanmak için sql.eachRow'u bir jeneratör gibi kullanabilirim. - Ben gitmek için çalışıyorum kullanım durumu JSON nesil akışı olduğunu benim yapmaya çalıştığım şey bu gibi bir şey:Groovy'de jeneratörler/verim eksikliği için geçici çözüm

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

cevap

2

Sen devam desteğine ihtiyaç duyacağını (veya benzer) bazı uzatmak için bunun için çalışmak. Groovy'nin devamlılığı yok, JVM de değil. Normalde devam eden stil çalışması devam eder, ancak her bir yöntemin bunu desteklemesi gerekir, ki bu elbette ki değil. Gördüğüm tek yol, iş parçacığı veya bunun gibi bir şey kullanan geçici bir çözüm. Yani belki böyle bir şey sizin için de kullanılabilir: Ben belirten değilim

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

, bu iyi bir çözüm olduğunu, rasgele tüketici-üretici-iş-etrafında sorun.

+0

Yine de, JVN'nin JRuby ve JPython'u var - bu yüzden yapılabilir. Her iki dil de 'verim' var. – will

İlgili konular