Распечатка переменных и значений в Groovy-объекте - PullRequest
31 голосов
/ 18 июня 2010

Как можно распечатать (публичные и внутренние) переменные и их значения объекта Groovy?

Т.е.

class X
{
  def X = 10
  def Y = 5

  private void doPrivate()
  {
      def Z = 3
  }
}

Должно дать

X, 10
Y, 5
Z, 3

Это должно быть динамическое решение, т. Е. Во время выполнения.

Ответы [ 3 ]

73 голосов
/ 18 июня 2010

dump()

Например

"ddd".dump()

Печать:

java.lang.String@2ef900 value = dddd offset = 0 count = 4хэш = 3078400

37 голосов
/ 18 июня 2010

Вы имеете в виду, как это?

def a = "Hi"

a.properties.each { println "$it.key -> $it.value" }

Дает:

class -> class java.lang.String
bytes -> [72, 105]
empty -> false

[править]

С вашим отредактированным вопросом это даст вам:

class -> class X
y -> 5
metaClass -> org.codehaus.groovy.runtime.HandleMetaClass@16de4e1[groovy.lang.MetaClassImpl@16de4e1[class X]]
x -> 10

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

0 голосов
/ 02 ноября 2018

Наличие функции, которую вы можете вызывать для самого объекта, удобно, но не существует из коробки. Если вы не возражаете загрязнять пространство имен в метаклассе Object, вы можете обезьяна исправить это следующим образом:

Object.metaClass.printit { -> println org.codehaus.groovy.runtime.InvokerHelper.toString(delegate) }
'asdf'.printit() // prints 'asdf'

printit не самое большое имя, но print, println и dump все взяты.

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