2009-07-28 159 views

回答

5

在Groovy中,只有閉包在默認情況下可以被調用。例如。課程不可開箱即用。如有必要,您可以動態地將呼叫方法添加到類型的ExpandoMetaClass以使該類型的所有實例可調用

提示:您可以使用GroovyConsole

閉包是調用默認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) 

爲了使特定類型的所有實例調用可以向其元類動態添加一個調用方法:

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

如果你只寧可做一個特定實例調用你可以動態地添加一個方法調用它的元類:

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

我注意到它的工作原理,即使不改變元類。如果我添加一個名爲`call`的方法,它會被調用。 – Geo 2009-07-29 08:18:00

相關問題