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

问题描述:

如果例如我有一个名为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() 
+2

我注意到它的工作原理,即使不改变元类。如果我添加一个名为`call`的方法,它会被调用。 – Geo 2009-07-29 08:18:00