Groovy Power Print - PullRequest
       4

Groovy Power Print

1 голос
/ 13 июля 2010

В Groovy есть подтверждение мощности, но я хотел бы получить отпечаток силы.Например,

def foo = 'banna5', monkey=7, x=70
println "foo=$foo, monkey=$monkey, x/2=${x/2}"

См. Повторяющиеся выражения foo, monkey и выражение в строке println ... Я хочу напечатать следующее:

pprint foo, monkey, x/2

Это выводожидайте (от println или pprintln),

foo=banna5, monkey=7, x/2=35

Есть ли какая-нибудь песенка, которая делает это уже?

Ответы [ 2 ]

0 голосов
/ 24 октября 2012

Это может или не может работать для вас.Вполне возможно, что это работает только в сценариях.

def pprint(def varClosure) {
    s=varClosure()
    print("\"$s\" = " + binding.variables[s])
}

test = 15

pprint{"test"}

Я использовал замыкание, чтобы оно передавало текущий контекст (для получения привязок).Вы можете перебирать замыкание различными способами - например, если вы передадите pprint {["test", "anotherVar"]}, вы можете использовать его вместо println:

s.each() { print("\"$it\" = ${binding.variables[s]},\t") }
println ""

Это дастдовольно близко к желаемым результатам.

Если вы хотите сделать это с классным классом, хеш привязок не существует.Существует хэш свойств, но он обращается только к свойствам объекта (не все переменные доступны для замыкания - другими словами, он пропустит переменные, определенные в методе и параметрах).

Возможно, закрытие имеет хешвсе доступные ему свойства - это было бы идеально.Я посмотрю позже.

Также есть метод dump () для объекта, который вам может понравиться.

0 голосов
/ 13 июля 2010

В Groovy нет ничего, что делает то, что вам нужно ...

Проблема заключается в получении имен переменных при распечатке значений.

Способ, которым powerrassertпохоже, делает это, используя AST-манипуляции с байт-кодом (см. строка 947 класса org.codehaus.groovy.classgen.AsmClassGenerator) для украшения метода assert несколькими классами внутри пакета org.codehaus.groovy.runtime.powerassert.

Таким образом, чтобы получить требуемые результаты, необходимо добавить нечто подобное, чтобы аналогичным образом манипулировать AST.

Вы можете добавить новую проблему с функцией JIRA проекта, и выникогда не знаешь ... это может превратиться в будущие версии Groovy

Но сейчас я думаю, что ты застрял со своим println, как у тебя выше

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