3

バックグラウンド

オプションの引数を別の関数に渡そうとすると問題が発生します。呼び出される関数にはオプションの引数もあるため、そのオプション性をずっと伝播させようとしています。

私が経験している問題は、オプションの引数が省略された場合、常温核融合には null の概念がない (または少なくとも実際には存在しない) ため、文字通り存在しないことです。

component accessors=true output=false persistent=false {
    public void function foo(String otherOptional, String optional1,String optional2 ){

        //Other code
        //Other code
        //Other code
        bar(optional1=optional1,optional2=optional2);

    }

    public void function bar(String optional1, String optional2 ){
         //Other code
    }
}

たとえば、上記のコードでfooが引数なしで呼び出された場合、エラーが発生します

Variable OPTIONAL1 is undefined.

The error occurred in D:/web/experimental/OptionalTest.cfc: line 11
9 : 
10 :        //Other code
11 :        bar(optional1=optional1,optional2=optional2);
12 : 
13 :    }

質問

エラーを引き起こさずに、オプションの引数を別の関数に渡す方法はありますか?

私が検討した解決策は次のとおりです。

  • 合格argumentcollection=arguments。しかし、bar が実際に必要とする引数を読み取るのが非常に難しくなるため、これは非常に不快に思えます (私はこのようなコードをデバッグしようとしましたが、楽しくありません)。fooまた、 と で異なる引数名が使用されている場合も機能しません。bar
  • オプションの引数が存在する場合にのみ渡すための一連の if StructKeyExists ステートメント。これは機能しますが、非常に複雑になる可能性があります。
4

2 に答える 2

2

あなたはそれらをデフォルトアウトしたいと思うでしょう

したがって、あなたの例では、次のようにoptional1等しいCF を伝えることができ""ます。

component accessors=true output=false persistent=false {
  public void function foo(String otherOptional="", String optional1="",String optional2="" ){

    //Other code
    //Other code
    //Other code
    bar(optional1=optional1,optional2=optional2);

  }

  public void function bar(String optional1, String optional2 ){
     //Other code
     if(len(optional1)){
       //do this
     }

     //etc
  }
}
于 2015-02-04T13:49:47.330 に答える