Groovy脚本中的可变可见性

时间:2016-10-27 19:23:42

标签: groovy

我创建了一个temp.groovy脚本:

def loggedMessages = [];

def log(message) {
    loggedMessages << message;
}

log "Blah"

print loggedMessages.join('\n')

当我运行它时,我得到一个与日志方法有关的异常:

groovy.lang.MissingPropertyException: No such property: loggedMessages

为什么log方法看不到loggedMessages变量?我显然对正在发生的事情有一个根本的误解。我试过阅读文档,但似乎无法找到相关部分。

1 个答案:

答案 0 :(得分:2)

从评论中,作为答案:

Script class documentation州(在上一节 3.4变量中):

如果变量声明为第一个示例[带有类型定义],则它是一个局部变量。它将在run方法中声明,编译器将生成并且在脚本主体外部不可见。特别是,这样的变量在脚本的其他方法

中不可见

进一步:如果变量未声明,则进入脚本绑定。可以从方法[...]

中看到绑定

因此,从def删除loggedMessages会修复错误:

loggedMessages = [];

def log(message) {
    loggedMessages << message;
}

log "Blah"

print loggedMessages.join('\n')

(或者可以使用@groovy.transform.Field进行注释,因为评论中指出了@aetheria)