2015-06-09 9 views
8

में जेनरेटर/उपज कीवर्ड की कमी के लिए वर्कअराउंड यदि कोई तरीका है तो मैं एक जनरेटर की तरह sql.eachRow का उपयोग कर सकता हूं, इसे एक डीएसएल संदर्भ में उपयोग करने के लिए जहां संग्रह या इटरेटर की अपेक्षा की जाती है। - उपयोग के मामले मैं के लिए जाने के लिए कोशिश कर रहा हूँ JSON पीढ़ी स्ट्रीमिंग है मुझे क्या करना कोशिश कर रहा हूँ की तरह कुछ है:ग्रोवी

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

उत्तर

2

आप निरंतरता समर्थन की आवश्यकता होगी (या समान) इस के लिए कुछ विस्तार करने के लिए काम करने के लिए। ग्रोवी में निरंतरता नहीं है, जेवीएम भी नहीं है। आम तौर पर निरंतरता गुजरने वाली शैली काम करती है, लेकिन फिर प्रत्येक विधि को उस विधि का समर्थन करना होगा, जो निश्चित रूप से नहीं है। तो मैं देखता हूं कि एकमात्र तरीका धागे या उस तरह कुछ का उपयोग कर एक अस्थायी समाधान है। आपकी समस्या के लिए,

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

मैं बताते हुए नहीं कर रहा हूँ कि यह एक अच्छा समाधान है, बस एक यादृच्छिक उपभोक्ता-निर्माता-काम के आसपास: तो शायद ऐसा ही कुछ आप के लिए काम करेगा।

+0

और फिर भी, जेवीएन में जेआरबी और जेपीथन है - इसलिए यह किया जा सकता है। दोनों भाषाओं में 'उपज' है। – will