我创建了一个temp.groovy
脚本:
def loggedMessages = [];
def log(message) {
loggedMessages << message;
}
log "Blah"
print loggedMessages.join('\n')
当我运行它时,我得到一个与日志方法有关的异常:
groovy.lang.MissingPropertyException: No such property: loggedMessages
为什么log方法看不到loggedMessages变量?我显然对正在发生的事情有一个根本的误解。我试过阅读文档,但似乎无法找到相关部分。
答案 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)