我有以下代碼: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