4

例如,如果我有一个名为 A 的类。我可以像 Python 那样使对象可调用吗?例如 :


def myObject = new A()
myObject()

这将调用一些对象方法。可以做到吗?

4

1 回答 1

6

在 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()
于 2009-07-28T20:33:03.760 回答