タグ付けされた質問 「optional-parameters」

オプションのパラメーターは、呼び出し元が関数またはメソッドの呼び出しに含めることができるパラメーターですが、必須ではありません。省略すると、代わりにデフォルト値が使用されます。オプションのパラメーターは、ほとんどの場合にデフォルト値を使用する場合に役立ちますが、場合によっては指定する必要があります。

19
関数呼び出しでオプションの引数をスキップするにはどうすればよいですか?
OK PHPで引数をスキップする方法を完全に忘れてしまいました。 私が持っているとしましょう: function getData($name, $limit = '50', $page = '1') { ... } 中央のパラメーターがデフォルト値(つまり、「50」)になるように、この関数をどのように呼び出しますか? getData('some name', '', '23'); 上記は正しいでしょうか?これが機能しないようです。

4
どのようにすれば迅速にオプションのクロージャーを作成できますか?
オプションのクロージャーを受け取るSwiftで引数を宣言しようとしています。私が宣言した関数は次のようになります。 class Promise { func then(onFulfilled: ()->(), onReject: ()->()?){ if let callableRjector = onReject { // do stuff! } } } しかし、Swiftは、「条件付きのバインド値は、「if let」が宣言されているOptionalタイプでなければならない」と不平を言っています。

13
C#4.0でオーバーロードまたはオプションのパラメーターを使用してメソッドを宣言する必要がありますか?
C#4.0についてのアンダースの話とC#5.0のプレビューを見ていて、C#でオプションのパラメーターが利用できる場合、すべてのパラメーターを指定する必要のないメソッドを宣言するために推奨される方法は何かを考えましたか? たとえば、何かFileStreamのクラスは、論理の家族'という文字列から、以下の例のものに分けることができる15程度異なるコンストラクタ、からのものがあるIntPtrとAからのものをSafeFileHandle。 FileStream(string,FileMode); FileStream(string,FileMode,FileAccess); FileStream(string,FileMode,FileAccess,FileShare); FileStream(string,FileMode,FileAccess,FileShare,int); FileStream(string,FileMode,FileAccess,FileShare,int,bool); このタイプのパターンは、代わりに3つのコンストラクターを使用し、デフォルトのパラメーターにオプションのパラメーターを使用することで簡略化できるように思えます。これにより、コンストラクターの異なるファミリーをより明確にすることができますBCLで作成された、私はこの種の状況について仮説的に話している]。 どう思いますか?C#4.0以降では、コンストラクターとメソッドの密接に関連するグループをオプションのパラメーターを持つ単一のメソッドにする方が理にかなっていますか、それとも従来の多くのオーバーロードメカニズムに固執する十分な理由がありますか?


8
オプションのパラメーターのデフォルト値としてString.Emptyを使用することはできません
私はビル・ワーグナーによるEffective C#を読んでいます。で項目14 -重複の初期化ロジックを最小化し、彼は、コンストラクタに新しいオプションのパラメータ機能を使用して、次の例を示します。 public MyClass(int initialCount = 0, string name = "") 彼がの""代わりに使用したことに注意してくださいstring.Empty。 彼はコメントします: (上記の例では)2番目のコンストラクターが、より慣習的なではなく、nameパラメーターのデフォルト値に ""を指定したことに注意してくださいstring.Empty。これstring.Emptyは、がコンパイル時の定数ではないためです。これは、文字列クラスで定義された静的プロパティです。コンパイル定数ではないため、パラメータのデフォルト値には使用できません。 string.Emptyすべての状況でstaticを使用できない場合、それはその目的を無効にしませんか?空の文字列を参照するシステムに依存しない手段があることを確認するためにそれを使用すると思いました。私の理解は間違っていますか?ありがとう。 更新 ただフォローアップコメント。MSDNによると: オプションの各パラメータには、定義の一部としてデフォルト値があります。そのパラメーターに引数が送信されない場合、デフォルト値が使用されます。デフォルト値は定数でなければなりません。 次にSystem.Environment.NewLine、どちらも使用できません。または、新しくインスタンス化されたオブジェクトをデフォルト値として使用できません。私はまだVS2010を使用していませんが、これは残念です。

3
関数を使用してオプションのパラメーターを定義する
関数のオプションのパラメーターとして特定の値の代わりに関数の戻り値を使用することは可能ですか?たとえば、代わりに: public void ExampleMethod(int a, int b, int c=10) { } 私のようなものが欲しい private int ChangeC(int a, int b) { return a+b; } public void ExampleMethod(int a, int b, int c=ChangeC(a,b)) { }
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.