Lazy Map Значения в Groovy - PullRequest
       21

Lazy Map Значения в Groovy

0 голосов
/ 11 декабря 2019

Таким образом, в groovy вы можете определить строку, значение которой будет извлекаться лениво каждый раз, когда ее значение читается.

System.setProperty('foo', 'bar')

def getMyValue = {
  return System.getProperty('foo')
}

def myData = [
  value1: "${ getMyValue() }",
  vaule2: "${ -> getMyValue() }",
]

System.setProperty('foo', 'bam')
println "${myData}"

System.setProperty('foo', 'baz')
println "${myData}"

При запуске это дает

[value1:bar, vaule2:bam]
[value1:bar, vaule2:baz]

Это действительно хорошо длязначения, которые являются строками

Что бы я хотел знать, возможно ли сделать что-то подобное для числовых типов

def myData = [
   myInt: { -> Integer.valueOf(System.getProperty('somePropThatIsSetDownStream')) },
]

Или если есть способ переопределить метод get на карте,что при выполнении get я мог бы выполнить замыкание, которое преобразует значение myData.myInt

def valueTransformer = { key, map ->
    if(map[key] instanceOf Closure) {
      return map[key].call()
    }
    return map[key]
}

Возможно, есть закрытие, которое переопределяет логику, которая происходит при вызове myData.myInt?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...