【发布时间】:2012-11-08 17:54:57
【问题描述】:
在 Groovy 中,我可以通过猴子修补元类的 call 方法使对象像函数一样可调用:
myObject.metaClass.call = { "hello world" }
println myObject() // prints "hello world"
修补call 只允许我调用不带参数的对象。有没有办法允许使用标准函数式语法使用参数调用对象?
编辑: 一个答案与 tim_yates 所建议的完全一样,尽管从 ataylor 的评论中值得注意的是,您可以简单地覆盖 call 而无需显式元编程:
class MyType {
def call(...args) {
"args were: $args"
}
}
def myObject = new MyType()
println myObject("foo", "bar") // prints 'args were ["foo", "bar"]'
显然,诀窍是使用 ...args 的可变参数签名。
【问题讨论】:
标签: groovy metaprogramming metaclass