我有以下代码:Groovy的:动态地将属性添加到从内部类方法Groovy类
class MyClass {
def myMethod() {
variable = "I am a variable"
}
def propertyMissing(String name) {
println "Missing property $name"
}
}
MyClass myClass = new MyClass();
myClass.myProperty
myClass.myMethod();
在myClass.myProperty,Missing property myProperty
印出到控制台。
但随后myClass.myMethod()
,常规并没有试图去propertyMissing
而只是抛出一个
groovy.lang.MissingPropertyException: No such property: variable for class: MyClass
一些网上搜索表明,这是因为myClass.myProperty
调用一个getter方法,其重定向到propertyMissing。
我猜测,在类方法中,groovy不通过getter方法获取变量,这就是为什么propertyMissing没有被调用?
有没有办法通过使用动态propertyMissing
或getProperty
或类似的东西来实现我想要做的事情?
P.S.我不想在myMethod中执行def variable = ...
或String variable = ...
。我希望myMethod
内的语法保持为variable = ...
,但在该方法之外添加任何内容都是可以接受的。
为什么groovy在执行'myClass.myMethod();时抛出一个错误;'当关键字'def'或任何数据类型关键字如'string'缺少时? –
我相信只有在脚本中运行它时,您才可以设置变量而不需要定义或声明它。当你在脚本中运行它时,如果没有定义或声明,那么这个变量会被放到脚本的Binding中(当你在脚本中时,你可以用getBinding()调用来访问它)。但是,当您没有运行脚本时,并没有“绑定”,并且Groovy希望您使用def或使用数据类型来声明它。 – user872831
http://groovy.codehaus.org/Scoping+and+the+Semantics+of+%22def%22 – user872831