有没有办法在Groovy中拥有可调用对象?

有没有办法在Groovy中拥有可调用对象?,groovy,object,language-features,callable,Groovy,Object,Language Features,Callable,例如,如果我有一个名为a的类,我可以像Python那样使对象可调用吗?例如: def myObject = new A() myObject() 这将调用一些对象方法。可以这样做吗?在Groovy中,默认情况下只能调用闭包。例如,类不能在开箱即用的情况下调用。如有必要,您可以动态地将调用方法添加到类型的,以使该类型的所有实例都可调用 提示:您可以使用 Groovy中默认情况下可调用闭包: // A closure def doSomething = { println 'do somethi

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


def myObject = new A()
myObject()

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

在Groovy中,默认情况下只能调用闭包。例如,类不能在开箱即用的情况下调用。如有必要,您可以动态地将调用方法添加到类型的,以使该类型的所有实例都可调用

提示:您可以使用

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
的方法,它将被调用。回答得很好!但是ExapandoMetaClass链接已断开。