Groovy закрытие $ v - PullRequest
       59

Groovy закрытие $ v

2 голосов
/ 29 марта 2019
@CompileDynamic
ClassNode buildTemplateClass(ClassNode reference) {
    def methodCount = constX(reference.methods.size())
    def fieldCount = constX(reference.fields.size())

    return  new MacroClass() {

        class Statistics {

            java.lang.Integer getMethodCount() {
                return $v { methodCount }
            }

            java.lang.Integer getFieldCount() {
                return $v { fieldCount }
            }
        }
    }
}

Я не могу разобраться с этой конструкцией $v { fieldCount }. Что это значит и зачем это нужно здесь? Для полной ссылки на то, что делает код, обратитесь к здесь .

В случае, если неясно, к чему относится метод constX, здесь .

1 Ответ

1 голос
/ 02 апреля 2019

Как написано в вашем документе , $v используется внутри макроса для замены выражения

Чтобы заменить любое выражение внутри макроса, нам нужно использовать метод $ v. $ v получает закрытие в качестве аргумента, и закрытию разрешено заменять только выражения, то есть классы, наследующие org.codehaus.groovy.ast.expr.Expression.

...