2016-04-09 2 views
1

見つかった場合は、括弧内に見つかった値を戻すルックアップリストが必要です。私はenumを使いたくない。Groovyアイテムのマップ値を取得し、見つかった場合はカッコで返します。

このよう

def grt = { ['mail': 'Scanned Paper', 'digital': 'Digital Things', 'barcode': 'Some Barcode Matter'].get(it) } 

def s = grt('digital') ? "($grt('digital')" : '' 
println "Report $s" 

しかし、(それ)GETの端に集まるのいくつかの種類があるように、私はそれを単純にやると「DEF s」の行を排除したいし、それがすべてであります1行私はエルビスを行うことができますが、

は私ものようなメタプログラミングを行うことができます)(入れていません:

Object.metaClass.prettyString = { delegate ? "($delegate)" : '' } 

してからちょうどしなければならない

println "Report $grt('digital').prettyString()" 

がなければなりませんある種類の

.get(it).collect { it ? "($it)" : '' } 

しかし、これは機能しません。ここで

答えて

3

は1行でそれを行うための方法です:

def grt = { 
    [ 
     'mail': 'Scanned Paper', 
     'digital': 'Digital Things', 
     'barcode': 'Some Barcode Matter' 
    ][it].with { 
     delegate ? "($delegate)" : '' 
    } 
} 

println "Report ${grt('digital')}" 
+0

完璧な、それが私が探していたものです。 'with'メソッドはまさに答えです。 Btw私はもともと[それ]を使用しましたが、他の人が読みやすいので、.get(it)に変更しました。 –

1

getを呼び出すときは、デフォルト値を提供することができます。

def grt = { 
    [ 
     'mail': 'Scanned Paper', 
     'digital': 'Digital Things', 
     'barcode': 'Some Barcode Matter' 
    ].get(it, '') 
} 

println "Report ${grt('digital')}" 
+0

私はこの解決策がより好きです – GLaDOS

+0

Jeff私は、かっこ内に置かれていると見つかった場合、つまりDigital Thingsを欠いているのでEmmanuelの答えを優先しました。しかし、私はあなたが得るためにデフォルトの結果を持つことができたことを理解していません。 –

関連する問題