2009-07-28 15 views

Antwort

5

In Groovy sind nur Verschlüsse standardmäßig aufrufbar. Z.B. Die Kurse sind nicht sofort abrufbar. Bei Bedarf können Sie dem Typ ExpandoMetaClass des Typs eine Aufrufmethode dynamisch hinzufügen, um alle Instanzen dieses Typs aufrufbar zu machen.

Hinweis: Sie können alle Codebeispiel die GroovyConsole

mit ausprobieren

Verschlüsse sind aufrufbar standardmäßig in Groovy:

// A closure 
def doSomething = { println 'do something'} 
doSomething() 

// A closure with arguments 
def sum = {x, y -> x + y} 
sum(5,3) 
sum.call(5,3) 

// Currying 
def sum5 = sum.curry(5) 
sum5(3) 

Um alle Instanzen eines bestimmten Typs aufrufbar möglich zu machen dynamisch eine Aufrufmethode zu seiner Metaklasse hinzufügen:

MyObject.metaClass.call = { prinlnt 'I was called' } 
def myObject = new MyObject() 
myObject() 

Wenn Sie lieber nur eine bestimmte Instanz aufrufbar machen können Sie dynamisch eine Call-Methode zu seiner Meta-Klasse hinzufügen:

def myObject = new MyObject() 
myObject.metaClass.call = { println 'Called up on' } 
myObject() 
+2

Ich bemerkte, es funktioniert auch ohne die Metaklasse zu verändern. Wenn ich eine Methode namens Call hinzufügen, wird sie aufgerufen. – Geo

+0

Große Antwort! Der Link "ExapandoMetaClass" ist jedoch fehlerhaft. – jacwah

Verwandte Themen