在Javascript中你可以用性能的定義對象和b像這樣:Groovy的:在飛行性能
myObj={a:'a',b:'b'}
,然後你可以添加一個性質C像這樣
myObj.c = 'c'
什麼的相當於Groovy的?我必須使用metaClass嗎?
使用案例:Grails中的JSON轉換器不會爲響應添加瞬態屬性,我只想將隨機屬性附加到我的對象列表的每個元素。
在Javascript中你可以用性能的定義對象和b像這樣:Groovy的:在飛行性能
myObj={a:'a',b:'b'}
,然後你可以添加一個性質C像這樣
myObj.c = 'c'
什麼的相當於Groovy的?我必須使用metaClass嗎?
使用案例:Grails中的JSON轉換器不會爲響應添加瞬態屬性,我只想將隨機屬性附加到我的對象列表的每個元素。
可以使用Map
,它具有類似的語法和行爲:
def myObj [a:'a', b:'b']
myObj.c = 'c'
您還可以將與瓶蓋的行爲,例如
myObj.sayHello = { -> println 'Hi' }
,然後調用它像一個方法:
myObj.sayHello()
從Using methodMissing and propertyMissing報價:
Groovy還支持propertyMissing用於處理財產的分辨率嘗試。對於一個getter您使用propertyMissing定義,需要一個String參數:
class Foo {
def propertyMissing(String name) { name }
}
def f = new Foo()
assertEquals "boo", f.boo
對於制定者添加第二個propertyMissing定義,需要一個值參數:
class Foo {
def storage = [:]
def propertyMissing(String name, value) { storage[name] = value }
def propertyMissing(String name) { storage[name] }
}
def f = new Foo()
f.foo = "bar"
assertEquals "bar", f.foo
與methodMissing你可能會希望在運行時動態註冊新屬性以提高代碼的性能。
如果我們正在談論一個Domain類,那麼我不能使用Map來做這件事。我想向列表中的每個成員添加一個屬性。 – dbrin
向列表中的每個成員添加屬性無非是一張地圖(鍵值對) –