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

标签 groovy object language-features callable

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


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()

关于groovy - 有没有办法在 Groovy 中拥有可调用对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1195437/

相关文章:

javascript - JavaScript 中对象增强和类增强的区别

lisp - lisp 缺少哪些功能?

regex - 在哪些语言中使用用户提供的正则表达式是一个安全漏洞?

grails - 成员变量变成空值,是虚假的?

javascript - 查找数组中最近的点

javascript - 向现有js对象添加多个属性

c - 为什么在 POSIX/IEEE 标准中 pthread_mutexattr_settype() 需要 _GNU_SOURCE 宏?

docker - 需要知道如何使用 Groovy 自动化 Docker 构建和运行时

groovy - 执行`/usr/bin/build-classpath`时出现`/usr/bin/groovy`消息

java - 记录方法执行时间