2012-01-09 10 views
6

私はGroovyを少し新しくしているので、これは非常に明白なものの1つだと確信しています...しかし、Google経由で検索するのは難しいです。Groovyの配列名の前にアスタリスクがありますか?

他の言語では、アスタリスクはポインタを表す傾向があります。しかし、Groovyコードのこのスニペットでは、

byte[] combineArrays(foo, bar, int start) { 
    [*foo[0..<start], *bar, *foo[start..<foo.size()]] 
} 

私は想像することができません。つまり、ポインタ?すごい?

このコードでは、多次元配列ではなくのメンバーfooとbarのを渡すことを前提としています。だからアスタリスクはどういう意味ですか?

ありがとうございました。

+1

修正;それはコレクションを平らにする。ここを通過することはありませんが、新しいコレクションにそれらを平らにするだけです。しかし、 '' [] ''の配列は配列ではないので、思考に吸い込まれないでください。 –

+0

(私はflattenと言うべきではありません。それは別のものですから、それを個々の要素に変換するコレクションをアンコレクショナルにしてください) –

+1

Mr Haki(いつものように)[spreadオペレータをカバーしています](http:// mrhaki .logspy.com/2009/09/groovy-goodness-spread-operator.html)いくつかの例があります –

答えて

10

このように使用すると、*演算子はリストまたは配列を引数のリストに広げます。それはまったく助けませんでしたか?代わりに例をどうですか?関数は、2つの数値引数を想定しているため

add(args) 

def args = [1, 2] 

は明らかに我々はこれを行うことはできません

def add(Number a, Number b) { 
    return a + b 
} 

、このリスト:私たちはこの機能を持っていると言います。しかし、*演算子は2つの要素のリストを2つの引数に変換するので、

を使用することができます。リストと配列でこの演算子を使用できます。私はGroovyを使って2年以上作業してきました。

+0

Groovyは自動的にargsを広げますので、最初の例も有効です。 – ataylor

+2

@taylorそれは本当ですが、それは恐ろしい特徴です言語IMOであり、Groovy 2.0での削除が予定されています(使用することをお勧めしません) –

関連する問題