为什么我在 GroovyConsole 中得到 MissingPropertyException?

Why do I get a MissingPropertyException in the GroovyConsole?

当我在 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)

您需要添加 Field 注释才能使其正常工作:

import groovy.transform.Field

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

其背后的原因是当你在函数外写任何东西而不在 groovy 中声明任何 class 它被移动到主函数。

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