У меня есть следующая карта:
configs = [
common : [
foo : '123',
bar : '456'
],
dev : [
foo : '789',
bar : '012'
],
test : null
]
Когда я добавляю dev
к common
, она прекрасно работает - значения из common
переопределяются значениями из dev
.Как раз то, что я хочу.
dev = configs['common'] + configs['dev']
println dev
// --> [foo:789, bar:012]
Однако, если я попробую то же самое с test
, я получу следующую ошибку:
groovy.lang.GroovyRuntimeException: Неоднозначная перегрузка методадля метода java.util.LinkedHashMap # plus.Не удается решить, какой метод вызывать для [null] из-за перекрывающихся прототипов между: [interface java.util.Collection] [interface java.util.Map]
Я могу заставить его работать, выполнив что-то вродеследующее:
test = [:]
test = configs['common']==null ? test : test + configs['common'] // First add common bits
test = configs['test']==null ? test : test + configs['test'] // Then override with environment specific bits
println test
// --> [foo:123, bar:456]
Но это кажется уродливым и раздутым.
Может ли кто-нибудь с лучшим Groovy-fu показать мне лучший способ?Спасибо!