4

当我在 GroovyConsole 中执行以下脚本时,它给了我一个MissingPropertyException但我不明白为什么:

def a = 'A'
def b() {
    println a
}
b()

抛出以下异常:

groovy.lang.MissingPropertyException: No such property: 
    a for class: ConsoleScript18
at ConsoleScript18.b(ConsoleScript18:3)
at ConsoleScript18.run(ConsoleScript18:5)
4

2 回答 2

11

其背后的原因是,当您在函数之外编写任何东西而不在 groovy 中声明任何类时,它会被移至主函数。

因此,变量的范围a仅限于main()您尝试在b()同一类的另一个函数中访问的函数。a但由于它抛出的 class没有属性MissingPropertyException

于 2015-08-26T09:25:12.587 回答
7

您需要添加Field注释以使其工作:

import groovy.transform.Field

@Field
def a = 'A'
def b() {
    println a
}
b()
于 2015-08-26T08:18:45.350 回答