2017-03-24 2 views
0

ハードコードされた変数map containing mapsで動作するGroovyメソッドがあります。マップを引数として渡すようにしたいと思います。マップの数はvaryにもなります。私が達成しようとしていますシンプルな表現がそうのようになります:Argsのはそうのように見えるとして私が合格する必要があるだろうMap of mapsタイプマップの複数の引数をとるGroovyメソッド

def name(Map p...) { 
//code to loop through each of the maps 
    p.each { k -> 
     "${k.first}, ${k.last}" 
//another loop with the internal map 
    something { 
     k.details.each { name, value -> 
    //some code 
     } 
    } 
} 
} 

そして例:次にラインダウン

def persons = [ 
[first: 'Jack', last: 'Smith', details: [gender: 'male', Age: 25]], 
[first: 'Sean', last: 'Dean', details: [gender: 'male', Age: 26]] 
] 

name(persons) 

どうすればいいですか?今までのgroovyConsoleのテストではどこにもいませんでした...

+0

を得る願っていますか? – Rao

+1

メソッドに定義されているマップではなく、 'name(persons)'リストを渡しているようです。 – Rao

+0

はい、それはここに理由があるようです...私はそれを見落とした – OK999

答えて

1

私は問題は、マップのマップはありませんがマップのリストを持っていると思います。だから、あなたがその署名を変更する必要があるパラメータとして、人とあなたのメソッドを呼び出すことができるようにする:

def map(List p) { 
    ... 
} 

これはgroovyコンソールの私の抜粋です。

def persons = [ 
    [first: 'Jack', last: 'Smith', details: [gender: 'male', Age: 25]], 
    [first: 'Sean', last: 'Dean', details: [gender: 'male', Age: 26]] 
] 

class Person { 
    def name(List p) { 
     println p 
    } 
} 

def p = new Person() 
p.name(persons) 
1

問題は、あなたがしているということです

例:

varArgsに渡し、あなたはリストから各要素を抽出し、それらを渡すために *(list)を使用する必要があります0
def name(Map... p) { 
    p.each{ println it} 
} 

def persons = [ 
[first: 'Jack', last: 'Smith', details: [gender: 'male', Age: 25]], 
[first: 'Sean', last: 'Dean', details: [gender: 'male', Age: 26]] 
] 

name(*(persons)) 

注:私はかなり確実私は右の用語を使用していないのですが、私はあなたがあなたが立ち往生している正確な問題を説明する気だろ要旨:)

関連する問題