2011-06-16 15 views
52

मैं सिर्फ ग्रोवी के साथ शुरुआत कर रहा हूं। मुझे ग्रोवी लिपि में तर्कों को संभालने के तरीके के बारे में कहीं भी कोई उदाहरण नहीं मिला और इसलिए मैंने इस विधि को स्वयं हैक किया। ऐसा करने का एक बेहतर तरीका होना चाहिए? यदि ऐसा है, तो मैं इस बेहतर तरीके की तलाश में हूं, क्योंकि शायद मैं स्पष्ट रूप से स्पष्ट हूं।ग्रोवी लिपि में दिए गए तर्कों को कैप्चर कैसे करें?

import groovy.lang.Binding; 
Binding binding = new Binding(); 
int x = 1 
for (a in this.args) { 
    println("arg$x: " + a) 
    binding.setProperty("arg$x", a); 
    x=x+1 
} 
println binding.getProperty("arg1") 
println binding.getProperty("arg2") 
println binding.getProperty("arg3") 

उत्तर

29

तुम सिर्फ तर्क आप मदद करने के लिए ग्रूवी CliBuilder का उपयोग कर सकते हो रही है और अधिक से अधिक उन्नत पार्स चाहते हैं। यह आपको कमांडलाइन झंडे, वैकल्पिक तर्क और उपयोग निर्देश मुद्रित करने में मदद करता है।

चेकआउट CliBuilder के जावाडोक या श्री हाकिस post इसके बारे में।

84

प्रश्न पूछने के बारे में खेद है। मैं तो बस यह समझ से बाहर:

println args[0] 
println args[1] 
println args[2] 
+0

पूरी तरह से काम करता है। मुझे इसके बारे में पता नहीं था। यहां एक अच्छा पृष्ठ है जहां सभी ग्रोवी स्क्रिप्ट संबंधित क्षमताओं को सूचीबद्ध किया गया है (तर्क परिवर्तनीय को शामिल करना) - http://groovy.codehaus.org/Groovy+CLI –

+1

@MichalBernhard लिंक अब मान्य नहीं है। प्रतिक्रिया के लिए –

+0

@Jamil thx। मैंने नया स्थान खोजने की कोशिश की लेकिन सफलता के बिना:/और ऐसा लगता है कि पृष्ठ Google कैश के माध्यम से भी उपलब्ध नहीं है। –

2

यह जावा के समान ही है और आप उसी जावा सिंटैक्स का उपयोग कर सकते हैं। उदाहरण के लिए।

class TestExecutor { 

    public static void main(def args) { 
     println("Printing arguments"); 
     for(String arguments : args) { 
      println (arguments); 
     } 
    } 

} 

भागो यह और आप तर्क मुद्रित देखना चाहिए

C:\Users\athakur\Desktop>groovy TestExecutor.groovy test1 test2 test3 
Aug 16, 2014 11:47:56 AM org.codehaus.groovy.runtime.m12n.MetaInfExtensionModule 
newModule 
WARNING: Module [groovy-nio] - Unable to load extension class [org.codehaus.groo 
vy.runtime.NioGroovyMethods] 
Printing arguments 
test1 
test2 
test3 

यह भी ध्यान रखें यदि आप मुख्य विधि प्रदान नहीं करते हैं या जैसे ऊपर के उदाहरण में तो आप args[i] के रूप में तर्क प्राप्त कर सकते हैं एक प्रदान लेकिन आप बदल सकते हैं सरणी का नाम (फिर जावा के समान)। तो आपके पास कुछ ऐसा हो सकता है -

public static void main(def argsNew) { 
    println("Printing arguments"); 
    for(String arguments : argsNew) { 
     //using args in above for loop will throw error 
     println (arguments); 
    } 
} 

प्वाइंट यह कठिन नहीं है। अंत में अन्य उत्तरों में सुझाए गए अनुसार आप हमेशा स्मार्ट पार्सिंग के लिए CliBuilder का उपयोग कर सकते हैं। लेकिन फिर भी उसमें आंतरिक रूप से def options = cli.parse(args) का उपयोग किया गया।

+0

"// लूप के लिए उपरोक्त तर्कों का उपयोग करके त्रुटि फेंक जाएगी" - क्या तर्क देता है? –

+0

"यदि आप मुख्य विधि प्रदान नहीं करते हैं या उपरोक्त उदाहरण में एक प्रदान करते हैं तो ... लेकिन आप सरणी का नाम बदल सकते हैं" - समझ में नहीं आता है। –

+0

@BlessedGeek का अर्थ है कि यदि आप मुख्य विधि प्रदान नहीं करते हैं या तर्कों में सरणी नाम के साथ एक 'तर्क' प्रदान करते हैं तो आप तर्कों के साथ पारित तर्कों का उपयोग कर सकते हैं [i]।लेकिन यदि आप 'मुख्य (डीफ args) 'से' मुख्य (def argsNew) से तर्कों में सरणी नाम बदलते हैं, तो आपको अनुमति दी जाती है कि आप' args [i] 'के रूप में पारित तर्कों तक पहुंच नहीं पाएंगे, आपको' argsNew 'का उपयोग करना होगा [ i] 'जैसा ऊपर उल्लिखित कोड में उल्लिखित है। –

13

सरलतम सिर्फ एक सरणी उदा .:

test.groovy रूप this.args उपयोग करने के लिए है

println this.args[0] 

कॉल:

C:>groovy test this 

आउटपुट:

this 
2

इसे आजमाएं:

args.each{println it} 
संबंधित मुद्दे