call
Groovy では、メタクラスのメソッドにモンキー パッチを適用することで、オブジェクトを関数のように呼び出し可能にすることができます。
myObject.metaClass.call = { "hello world" }
println myObject() // prints "hello world"
パッチを適用call
すると、引数なしでオブジェクトを呼び出すことしかできなくなります。標準の関数のような構文を使用して、引数を指定してオブジェクトを呼び出す方法はありますか?
編集: 1つの答えはtim_yatesが示唆するとおりですが、call
明示的なメタプログラミングなしで単純にオーバーライドできるというataylorのコメントから注目に値します:
class MyType {
def call(...args) {
"args were: $args"
}
}
def myObject = new MyType()
println myObject("foo", "bar") // prints 'args were ["foo", "bar"]'
どうやらトリックは、を使用した可変引数署名...args
です。