9
私はGroovyでメタクラスプログラミングをしています。しかし、突然、私はちょうど働いて得ることができなかった小さな問題に直面していた...ここでメタクラスにメソッドを追加する
は簡単なスクリプトです:
// define simple closure
def printValueClosure = {
println "The value is: '$delegate'"
}
String.metaClass.printValueClosure = printValueClosure
// works fine
'variable A'.printValueClosure()
// define as method
def printValueMethod(String s){
println "The value is: '$s'"
}
// how to do this!?
String.metaClass.printValueMethod = this.&printValueMethod(delegate)
'variable B'.printValueMethod()
は、それがメソッドを使用しますが、呼び出しに最初のパラメータを設定することが可能ですオブジェクト?デリゲートを使用して動作していないようです...呼び出し元を参照していないメソッドの割り当ては問題ありません。カリングはここで動作しますか?
def printValueMethod(String s){
println "The value is: '$s'"
}
String.metaClass.printValueMethod = { -> printValueMethod(delegate) }
assert 'variable B'.printValueMethod() == "The value is: 'variable B'"
idomatic道をすることであろうクロージャを使用せずにメソッドを追加する:
おかげで、 インゴ
ニース。ありがとう。決してそれを考えませんでした...クラスに(クラスではなく)たくさんの静的ヘルパーメソッドを追加する便利な方法がありますか?たとえば、Apache Commons IO FileUtilsをファイルクラスに設定しますか? – Ingo
ああ...あなたの編集も私の追加質問に答えます。再度、感謝します。 – Ingo