問題タブ [variadic-functions]
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.
python - When should I use varargs in designing a Python API?
Is there a good rule of thumb as to when you should prefer varargs function signatures in your API over passing an iterable to a function? ("varargs" being short for "variadic" or "variable-number-of-arguments"; i.e. *args
)
For example, os.path.join
has a vararg signature:
Whereas min
allows either:
Whereas any
/all
only permit an iterable:
c++ - C++ で変数パラメーター関数をラップする
xmlrpc "call" 関数 (可変数のパラメーターを取る) を別の関数 (可変数のパラメーターを取る) でラップしたいと思います。ラッパー関数に渡された可変数のパラメーターを xmlrpc "call" 関数に単純に転送したいと思います。va_start と va_arg の使用方法は知っていますが、渡される値についてはあまり気にしません。単純にそれらをラップされた関数に転送したいだけです。これは可能ですか?
ラップしたい関数の仕様は
私のラッパーは最初の 3 つのパラメーターと参照結果を処理します。追加のパラメーターを call 関数に転送するだけです。
c - Cvarargs-va_copyの問題
可変数の引数を取る関数をCで書いています。
ここまでは順調ですね。RightWay™を実行して、可変引数をとるバージョンと、をとる別のバージョンを作成するのが最善であると判断しましたva_list
。
それほど難しいことではありません。ただし、2つの異なる関数my_vprintf()
に送信する必要がありますargs
(最初にsnprintf()
長さ0で必要な部屋の量を決定し、次にsprintf()
その量の部屋を割り当てた後に)。私はこれをで行いva_copy
ます。
これはすべて問題なくダンディですが、C99の実装は少し不十分です。可能であれば、コードをC89でも動作させ、できるだけ多くのコンパイラーとプラットフォームで動作させたいと思います。私は現在#include <stddef.h>
、コードの後で、しかし前にこれを持っています:
それ((a)=(b))
は信頼できないので、多分使うべきだと思いますmemcpy()
が、これは「C99をサポートしていなければ、うまくいくといいのですが」というレベルにあります。 C99、恐れることはありません」(これが私が望むものです)。この制限を回避する良い方法はありますか?私はいくつかの解決策を見てきましたva_list
-1つの引数を食べて再帰する関数、2つを渡してva_list
2つの別々のコピーが作成されるなど-しかし私はそれらがどれほどうまくいくかわかりません(そして再帰的な解決策はうまくいきません電話をかけたいだけならvsnprintf()
、今、そうしますか?)
だから私はあなたに目を向けます、StackOverflowユーザー。C89との互換性を提供するために私ができることは他にありますか、それともユーザーはva_copy
それ__va_copy
を吸い込んで受け入れる必要がありますか?
c - C の可変数の引数を持つ関数と設計指向の質問
SetParams(...)
可変数の引数で名前を付けた C 関数があります。この関数は、静的データ構造をセットアップします (名前を付けましょうData
)。SetParams
などの引数のペアで使用されますSetParams("paramA", paramA_value, "paramB", paramB_value)
。何度も呼び出すこともできます。e.g.
Execute
すべての「パラメータ」が設定されると、引数を取らない別の関数が呼び出されます (名前を付けましょう)。
この種のコードをよりオブジェクト指向の方法で構築できないかと考えていました。いくつかの引数のペアが他の引数と矛盾する可能性があるため、特にエラー処理についてアドバイスをお願いします。
scala - Scala で繰り返しパラメーターをプログラムで設定する
Futures.awaitAll
可変数の井戸で呼び出しようとしています... Future
s。awaitAll
として定義されawaitAll(timeout : Long, fts : Future[Any]*)
ます。List
aと anを渡そうとしましたArray
が、両方とも機能しません。
編集:私が今やりたいことはFutures.awaitAll
、可変数の引数(1からn)を使用してプログラムで呼び出すことです。したがって、使用Futures.awaitAll(1000, future1, future2)
はオプションではありません。
Programming in Scala の 8.8 章でも、これを解決する方法のヒントが得られなかったので、助けを歓迎します :)
visual-studio - Visual Studio 2005 の x64 va_list
クラスの非静的メンバー関数があり、可変引数があります。64 ビット Windows で、64 ビット ランタイムを使用して Visual Studio 2005 でコンパイルしています。
float を期待しています。float を関数に渡します。しかし、デバッグすると、渡したフロートが得られません。実際、これは関数によって 64 ビット double として受信されています! 私はこれをしなければなりません:
これで、Win64 はレジスタでパラメータを渡すのが好きで、これを行うときにフロートをキャストすることがわかっています。
ほとんどの参照によると、渡されたパラメーターでいっぱいのクリーンなスタックが必要です。
私の質問は次のとおりです。これは正しい動作ですか、それともバグですか? また、それがバグである場合、それは私のバグですか、それとも Microsoft のバグですか?
WIN64 と _M_AMD64 を定義していますが、WIN32 は未定義です。
java - 固定/可変アリティ (varargs) の両方に一致する最も具体的な方法
Java 言語仕様のセクション 15.12.2.5 では、固定アリティのメソッドと可変アリティのメソッド (つまり ) の両方の場合で最も具体的なメソッドを選択する方法について説明していますvarargs
。
JLS で見つけられないのは、1 つは固定アリティで、もう 1 つは可変アリティの2 つの方法の間で決定することです。例えば:
期待どおりにコンパイルされます (以下に Yoni が概説する理由によります)。この呼び出しコードは以下もコンパイルします。
それを実行すると、method #1
(つまり、非可変引数メソッド) が呼び出されます。この呼び出しコードがあいまいではないのはなぜですか? 固定アリティ方式が可変アリティ方式よりも具体的なのはなぜですか? 誰かが仕様の関連するビットを教えてもらえますか?
c - 可変引数関数をマクロに変換する方法は?
アプリケーションにエラーメッセージを出力する可変引数関数があります。そのコードは次のとおりです。
この関数は、次のようなエラー状態で使用されます。
このerror()
関数は、さまざまな場所からさまざまな引数を使用して呼び出されます(可変引数関数)。
関数アプローチは正常に機能します。
さて、この関数をマクロに変換する必要がある場合、どうすればよいですか?私はそれを次のようにやってみました:
しかし、これは引数を正しく出力しません。
上記のマクロ定義の何が問題になっていますか?
修正は何ですか?
actionscript-3 - AS3 で変数引数をアンロールする
AS3 で可変長引数リストをアンパックする方法があるかどうか疑問に思っています。たとえば、次の関数を使用します。
これを呼び出すと:
結果には、ネストされた一連の配列が含まれるようになりました。
ここでの問題は、args パラメータが配列として扱われることです。したがって、可変引数リストを持つ関数に渡すと、単一の引数として扱われます。
Scala には、リストをパラメーターのリストに分割するようコンパイラーに指示する :_* 演算子があります。
配列を引数リストに展開する手法/演算子が AS3 に存在するかどうかを知りたいです。