Groovy范围 – 如何在方法中访问脚本变量
发布时间:2020-12-14 16:37:59 所属栏目:大数据 来源:网络整理
导读:我有一个关于Groovy中的范围规则的问题。在下面的代码片段中,我有三个变量,一个有局部作用域,b个有脚本范围,c也应该使用@Field注释来获取脚本作用域。 #!/usr/bin/groovyimport groovy.transform.Field;//println org.codehaus.groovy.runtime.InvokerHe
我有一个关于Groovy中的范围规则的问题。在下面的代码片段中,我有三个变量,一个有局部作用域,b个有脚本范围,c也应该使用@Field注释来获取脚本作用域。
#!/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(); 我在注释线上得到MissingPropertyExceptions。由于该变量具有本地作用域,因此预期出现异常。但是我希望b可以在method()中访问 – 它不是。 所以我的问题是: >为什么我无法访问在@Field中注释的变量 解决方法
当您在groovy脚本中的类声明之外有方法或语句时,将创建一个隐式类。回答你的问题:
>在你的例子中,func()可以访问字段c,因为它们都是隐式类的成员。主班不是,所以不行。 例: #!/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 scriptObject def binding def method() { // println a // MissingPropertyException println binding.b println scriptObject.c } } func(); new Main(scriptObject: this,binding: binding).method(); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |