4
如果例如我有一個名爲A的類。我可以使對象可調用,就像Python一樣嗎?例如:有沒有辦法在Groovy中擁有可調用的對象?
def myObject = new A()
myObject()
並且會調用一些對象方法。可以做到嗎?
如果例如我有一個名爲A的類。我可以使對象可調用,就像Python一樣嗎?例如:有沒有辦法在Groovy中擁有可調用的對象?
def myObject = new A()
myObject()
並且會調用一些對象方法。可以做到嗎?
在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()
我注意到它的工作原理,即使不改變元類。如果我添加一個名爲`call`的方法,它會被調用。 – Geo 2009-07-29 08:18:00