【发布时间】:2010-11-14 18:58:57
【问题描述】:
例如,如果我有一个名为 A 的类。我可以像 Python 那样使对象可调用吗?例如:
def myObject = new A()
myObject()
这会调用一些对象方法。能做到吗?
【问题讨论】:
标签: groovy object language-features callable
例如,如果我有一个名为 A 的类。我可以像 Python 那样使对象可调用吗?例如:
def myObject = new A()
myObject()
这会调用一些对象方法。能做到吗?
【问题讨论】:
标签: groovy object language-features callable
在 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 的方法,它将被调用。