1

'??' が存在する groovy について読んだ漠然とした記憶があります。メソッド名を動的にするために使用できるシュガー。これが Grails の動的ファインダーを実現する方法だと思っていましたが、思い出すとグルーヴィーだったのか疑問です。例を考えると:いくつかのメソッドでクラスを作成します

class GroovyExample {

  public def getThingOne(){return '1'}

  public def getThingTwo(){return '2'}

  public def getModifiedThingOne(){
    return this.modify(this.thingOne)
  }

  //  *!!!*  I want to get rid of this second modifying method    *!!!*
  public def getModifiedThingTwo(){
    return this.modify(this.thingTwo)
  }

  private def modify(def thing){
    //...
    return modifiedThing
  }

}

??次のようなものまでDRYするために使用できるメソッド名の砂糖はありますか:

class GroovyExample {

  public def getThingOne(){return '1'}

  public def getThingTwo(){return '2'}

  //  Replaced the two getModifiedXX methods with a getModified?? method I think I can do....
  public def getModified??(){
    return this.modify(this."${howeverYouReferenceTheQuestionMarks}")
  }

  private def modify(def thing){
    //...
    return modifiedThing
  }

}

new GroovyExample().modifiedThingTwoアイデアは、「変更ヘルパーメソッド」を 1 つだけ使用して、どちらの方法でも呼び出して同じ答えを得ることができるということです。これは可能ですか???と呼ばれるものは何ですか?String(一生グーグルで検索することはできません。) そして、 「in」を参照するにはどうすればよい??ですか?

4

1 に答える 1

2

その構文はわかりませんが、methodMissing()per hereを実装することで機能を実装できます。これは、そのリンクによると、あなたが言及した動的ファインダーの最初のアクションメカニズムです(ただし、メソッドの最初のヒット後にキャッシュがあると思います)-上部の警告に注意してください。

この簡単なテストのようなものがあなたの法案に合うかもしれません:

   def methodMissing(String name, args) {
       switch (name) {
           case "getModifiedThingOne":
               return this.modify(this.thingOne)
           case "getModifiedThingTwo":
               return this.modify(this.thingTwo)              
       }
   }
于 2012-12-06T00:51:22.817 に答える