Groovy关闭$ v

时间:2019-03-29 00:48:39

标签: groovy macros closures

var a = prompt('Number or String? Verify now!');

if(!isNaN(a)){
  alert('This is number.');
}
else alert('This is string.')

我无法理解这种结构@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 } } } } } 。这是什么意思,为什么在这里需要?有关代码在做什么的完整参考,请参考here

如果不清楚constX方法引用的是here

1 个答案:

答案 0 :(得分:1)

正如在您的doc中所写的那样,powers = list(zip(*((i, i**2, i**3) for i in range(1, n+1)))) # [(1, 2, 3), (1, 4, 9), (1, 8, 27)] s = sum(p0 * p1 * p2 for p0, p1, p2 in product(*powers)) 在宏中使用 替换了表达式

  

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