【问题标题】:Groovy closure $vGroovy 闭包 $v
【发布时间】:2019-03-29 00:48:38
【问题描述】:
@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 }。这是什么意思,为什么这里需要这个?有关代码功能的完整参考,请参阅 here

如果不清楚 constX 方法引用了什么 here

【问题讨论】:

  • 你能详细说明“我有”吗?假设你不是自己写的并且完全忘记了它:它来自哪里?其余的课程是公开的吗(你可以链接它)吗?
  • 我已经编辑了这个问题。谢谢

标签: groovy macros closures


【解决方案1】:

正如您在doc 中所写,$v 在宏中用于替换表达式

为了替换宏中的任何表达式,我们需要使用 $v 方法。 $v 接收一个闭包作为参数,并且闭包只允许替换表达式,这意味着继承 org.codehaus.groovy.ast.expr.Expression 的类。

【讨论】:

    猜你喜欢
    • 2011-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-15
    • 2013-05-22
    • 1970-01-01
    • 2016-04-16
    • 2016-09-29
    相关资源
    最近更新 更多