問題タブ [default-arguments]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
7680 参照

scala - Scala の制限付き型パラメータ化ケース クラスとデフォルト引数の問題

以下を考慮してください (Scala 2.8.1 および 2.9.0 でテスト済み):

最後の行は次のように失敗します。

これを変更するとval dogMap = AnimalsMap[Dog](Map())修正されますが、デフォルトの引数値を利用できなくなります。

リストの対応物が期待どおりに機能するのに、デフォルト値が Map[Nothing,Nothing] と推論されるのはなぜですか? 引数のデフォルト値を使用する AnimalsMap インスタンスを作成する方法はありますmapか?


編集:私は、より差し迫った 2 番目の質問への回答を受け入れましたが、キーの型Map()がこれら 2 つのケースで異なって推論される理由を知りたいと思います。


編集2:型の境界は無関係であるようです-ケースクラスへのパラメトリック型は問題を引き起こします:

0 投票する
2 に答える
1105 参照

c++ - オーバーロードされた関数をアルゴリズムで既定の引数と共に使用するにはどうすればよいですか?

よく聞かれる「オーバーロードされた関数へのポインターを指定するにはどうすればよいですか?」に対する答えを知っています。:代入またはキャストのいずれかを使用し、他のすべての C++ チュートリアルでは、次のように文字列を大文字にします (ギブまたはテイクstatic_cast):

またはこのように:

<cctype>のオーバーロードをきちんと選択しstd::toupperます。

しかし、ここで疑問が生じます<locale>。同様の方法でオーバーロードを選択するにはどうすればよいでしょうか?

または、より実際的にstd::stoiは、アルゴリズムで C++11 を使用して、文字列のベクトルを整数のベクトルに変換しようとしている人を考えてみstoiてください。2 つのオーバーロード ( string/ wstring) があり、それぞれが 2 つの追加の既定の引数を取ります。

これらすべてのデフォルトを明示的にバインドしたくないと仮定すると、そのような呼び出しを補助関数またはラムダでラップせずにこれを行うことは不可能だと思います。完全に一般的な方法でそれを行うためのブーストラッパーまたは TMP マジックはありますか? ラッパーは好きですcall_as<char(char)>(fp2)か、call_as<int(const std::string&)>(std::stoi)それとも書くことさえできますか?

0 投票する
1 に答える
120 参照

python - 引数のデフォルト値

重複の可能性:
Pythonの「驚き最小の原則」:可変のデフォルト引数

次の関数について考えてみます。

fooを呼び出すたびに、前回よりも多くの要素を含む新しいリストが出力されます。例:

ここで、次の関数について考えてみます。

何度か呼び出すと、次の図が表示されます。

つまり、呼び出しごとに大きな値を出力するわけではありません。

そのような一見一貫性のない行動の背後にある理由は何ですか?
また、最初の例の直感に反する動作を正当化するにはどうすればよいですか?関数が呼び出し間で状態を保持するのはなぜですか?

0 投票する
1 に答える
218 参照

c++ - 未使用のデフォルト関数引数のインスタンス化の防止

関数ポインターをパラメーターとして受け取る関数があり、そのパラメーターにはデフォルトの引数があるとします。

Fooclassでregister を使用したいのですFooが、デフォルトのコンストラクターがないため、動作しませんdefault_construct。明らかな解決策は、次のようにすることです。

しかし、それはうまくいきません。register<Foo>1 か所でしか呼び出されず、使用する関数が渡されてもdefault_construct<Foo>、コンパイラによってインスタンス化され、コンパイラ エラーが発生します。慣れないから飛ばした方が良さそうですが、そうでもないのではないでしょうか。

default_constructデフォルトの引数として使用されているときにインスタンス化されないようにする方法はありますか? 私が考えることができる唯一の解決策は、それをテンプレートに入れることですが、より良い解決策があるはずです.

0 投票する
5 に答える
15735 参照

php - デフォルト値をオブジェクトとして設定するPHP関数

class temp関数(実際には別のクラスのコンストラクター)には、引数としてのオブジェクトが必要です。そこで、関数の引数として定義interface itempして含めます。これは問題ありません。関数にオブジェクトをitemp $obj渡す必要があります。しかし今、私はこの引数class tempにデフォルト値を設定したいと思います。itemp $objどうすればこれを達成できますか?

それとも不可能ですか?

明確にするためのテストコード:

0 投票する
1 に答える
119 参照

parameters - 動的なデフォルト引数を持つ方法はありますか?

ユーザーがメンバー変数を変更して、そのメンバー関数のデフォルトの引数を変更できるクラスを作成しようとしています。

これまでの私の回避策は、マジックナンバーを使用することでしたが、これは明らかに理想的ではありません。

より良い方法はありますか、それとも私はこの「ハック」ソリューションに固執していますか?

0 投票する
6 に答える
37606 参照

python - インスタンスメンバーのデフォルトの引数値をメソッドに渡す方法は?

インスタンスの属性の値を使用して、デフォルトの引数をインスタンスメソッドに渡したい:

それを試してみると、次のエラーメッセージが表示されます。

メソッドを次のように動作させたい:

ここでの問題は何ですか、なぜこれが機能しないのですか?そして、どうすればこれを機能させることができますか?

0 投票する
4 に答える
838 参照

c++ - 渡す引数とデフォルトのままにする引数を明確に指定するにはどうすればよいですか?

このために尋ねられたc++のデフォルトの引数

次のような関数があるとします。void f(int p1=1, int p2=2, int p3=3, int p4=4);

そして、いくつかの引数のみを使用して呼び出したいと思います。残りはデフォルトになります。

このようなものが機能します:

しかし、実用的であるためにはあまりにも多くのコードが必要です。

これを行うためのより良い方法はありますか?

0 投票する
2 に答える
420 参照

python - numpyサブクラスは、pythonically継承クラスから__new__への引数を受け入れません

「Parray」と呼ばれるndarrayのサブクラスを作成しました。これは、pと次元の2つの引数を取ります。それ自体は正常に動作します。ここで、SirPlotsAlotというクラスを作成します。このクラスは、派手なnewarray_finalizeなどを一切使用せずにParrayを継承します。

私のプログラムのオブジェクトは、オブジェクトp = Parameters()を前後に渡すことにより、パラメーターのセットを共有します。

今、私がタイプすると(ファイルはauxiliary.pyです):

素敵な「初期次元3の初期化Parray」を期待して、代わりに「2」を取得します。しかし、私が入力した場合:

私は得る

「p」はintであると考えていますが、そうではありません。それをいじってみると、一見無関係に見える奇妙なエラーがたくさん発生する可能性があります。それが「2」であると考えるint。私は完全に迷子になっています。

#(1)コメント(スーパーコール)の有無にかかわらず試してみました。

遊んでいる他のエラーには、「AttributeError:'list'オブジェクトには属性'p'がありません」、「TypeError:new()は正確に2つの引数を取ります(1つ指定)」、「ValueError:解凍するには0を超える値が必要です」(I新しい's引数を*argsに置き換えました。これは私がよく理解していないことです)。

0 投票する
4 に答える
1057 参照

c++ - 既存の関数引数を使用して他のデフォルト引数を評価できないのはなぜですか?

私は引数としてfoo()2 を受け取る関数を書いていました。null で終了する文字列が渡されます。デフォルトでは、文字列の (最後の文字) を指します。const char*pBeginpEndfoo()pEnd\0

ただし、上記の行で次のようなエラーが発生します。

なぜコンパイラはそのような操作を許可しないのですか? 潜在的な問題は何ですか?