web-dev-qa-db-ja.com

Groovyスクリプトに渡された引数をキャプチャする方法は?

私はGroovyを始めたばかりです。 Groovyスクリプトの引数を処理する方法の例がどこにも見つからなかったため、このメソッドを自分でハッキングしました。これを行うためのより良い方法が必要ですか?もしそうなら、私はおそらくより良い方法を探しています。

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")
64
djangofan

引数を取得するだけでなく、より高度な解析が必要な場合は、Groovy CliBuilderを使用すると役立ちます。コマンドラインフラグ、オプションの引数、および使用方法の印刷を支援します。

チェックアウト CliBuilder のJavadocまたはMrHakis post について。

33
xlson

質問して申し訳ありません。私はちょうどそれを理解しました:

println args[0]
println args[1]
println args[2]
98
djangofan

最も簡単なのは、単にthis.args配列として:例:

test.groovy

println this.args[0]

コール:

C:>groovy test this

出力:

this
16
paulkav1

これを試して:

args.each{println it}
5
Zak

Javaと非常によく似ており、同じJava構文を使用できます。たとえば、.

_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
_

また、mainメソッドを提供しない場合、または上記の例のように提供しない場合は、引数を_args[i]_として取得できますが、配列の名前を変更できます(Javaと同じ)。だからあなたは次のようなものを持つことができます-

_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)を使用しました。

2
Aniket Thakur