Groovy champ d'application - comment accéder à la variable de script dans une méthode

J'ai une question sur les règles de portée en Groovy. Dans l'extrait suivant, j'ai trois variables, a a une portée locale, b a un script portée, et c devriez obtenir script de la portée de l'aide de l' @Field annotation.

#!/usr/bin/groovy
import groovy.transform.Field;

//println org.codehaus.groovy.runtime.InvokerHelper.getVersion()

def a = 42;
b = "Tea"
@Field def c = "Cheese"

void func()
{
    //println a //MissingPropertyException
    println b //prints "Tea"
    println c //prints "Cheese" with groovy 2.1.2, MissingPropertyException with groovy 1.8.6

}

class Main
{
    def method()
    {
        //println a //MissingPropertyException
        //println b //MissingPropertyException
        //println c //MissingPropertyException with both 1.8.6. and 2.1.2
    }

}

func();
new Main().method();

- Je obtenir MissingPropertyExceptions sur les lignes indiquées avec des commentaires. Les exceptions à la a sont attendus, que cette variable a une portée locale. Mais je m'attends b pour être accessible à l'intérieur de method() - il n'est pas.
@Field ne pas faire n'importe quoi en groovy 1.8.6, même après la mise à niveau, il fonctionne, donc je suppose que c'est un vieux bug. Néanmoins, c est inaccessible à l'intérieur de method() avec la version.

Donc mes questions sont:

  1. Pourquoi ne puis-je pas accéder à une variable annoté avec @Field à l'intérieur
    method()?
  2. Comment puis-je me référer à une variable de script à l'intérieur de method()?
InformationsquelleAutor amarillion | 2013-03-25