В Groovy есть ли способ узнать имя переменной, содержащей замыкание? - PullRequest
4 голосов
/ 08 августа 2011

Название может вводить в заблуждение. Что я действительно хочу, так это знать имя замыкания внутри контроллера. Но замыкания в Groovy всегда являются анонимными, поэтому нет имени самого замыкания. Но замыкание присваивается переменной, и мне интересно, смогу ли я получить имя этой переменной. Возможно, пример поможет. В контроллере Grails представьте, что у меня есть следующее:

  def get_data = {
      Map results = [ 'errorCode' = -1, 'method' : 'get_data' ]
      ...
      render results as JSON
  }

В Map с именем results есть элемент с именем 'method', который я хочу присвоить названию этого замыкания (или переменную, содержащую замыкание, чтобы быть более точным). Это возможно? Идея в том, что я хочу обобщить карту результатов и хочу автоматически заполнить элемент с именем «method». Инстинктивно кажется, что это возможно, но я не нашел подобных сценариев использования, которые иллюстрируют, как это сделать Любая помощь высоко ценится.

1 Ответ

9 голосов
/ 08 августа 2011

Я не думаю, что вы можете получить имя переменной в общем случае.Это только ссылка, и закрытию можно назначить многие из них.

Однако очень просто получить имя текущего действия в коде контроллера:

def get_data = {    
  def results = ['method': actionName]
}

См. документацию .

...