为什么我在GroovyConsole中遇到MissingPropertyException?

Mic*_*ael 3 groovy groovy-console

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

def a = 'A'
def b() {
    println a
}
b()
Run Code Online (Sandbox Code Playgroud)

抛出以下异常:

groovy.lang.MissingPropertyException: No such property: 
    a for class: ConsoleScript18
at ConsoleScript18.b(ConsoleScript18:3)
at ConsoleScript18.run(ConsoleScript18:5)
Run Code Online (Sandbox Code Playgroud)

小智 10

这背后的原因是当你在函数之外写任何东西而没有在groovy中声明任何类时它会被移动到main函数.

因此,变量的范围a仅限于main()您尝试在b()同一类的另一个函数中访问的函数.但由于没有a上课的财产,它会抛出MissingPropertyException.


Opa*_*pal 6

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

import groovy.transform.Field

@Field
def a = 'A'
def b() {
    println a
}
b()
Run Code Online (Sandbox Code Playgroud)