問題タブ [arity]
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.
c++11 - std::bind() 結果のアリティおよびその他の特性を決定するための標準的な方法は?
コールバック メカニズムの登録を実行するためのクリーンなパブリック インターフェイスをクラスに持たせる方法を見つけようとして、数日間頭を悩ませていました。コールバックは、C++11 ラムダ、、、、std::function<void(Type1,Type2)>
またはの結果にすることができます。std::function<void(Type2)>
std::function<void()>
std::bind()
このインターフェイスの重要な点は、クラスのユーザーが、ユーザーがスローする可能性のあるほぼすべてのファンクター/コールバック メカニズムを受け入れる 1 つのパブリック インターフェイスについて知っているだけでよいということです。
ファンクターとインターフェースの登録を示す簡略化されたクラス
enable_if<> の使用が複雑になる唯一の理由は、特定のメソッドをオン/オフすることです。これを行う必要があるのは、 std::bind() の結果を Register() メソッドに渡したい場合で、次のような単純な署名がある場合、複数の登録メソッドに対してあいまいに一致する可能性があるためです。
車輪を再発明するのではなく、traits.hppを参照してから、std::bind() のサポートを追加する「functor_traits」という名前の独自の特性ヘルパーでラップしました。
これは、バインドされた関数「アリティ」を識別するためにこれまでに思いついたものです...またはバインド結果が次のように期待する引数の数:
バインド結果のアリティを見つけようとする私の試み
この実装は libstdc++ を使用して gcc で動作しますが、std::bind() の結果を分解しようとするため、これが移植可能なソリューションであるかどうかはよくわかりません。 libstdc++ のユーザーとして行う必要はありません。
だから私の質問は次のとおりです: std::bind() の結果を分解せずに、バインド結果のアリティをどのように決定できますか? 制限付き引数を可能な限りサポートする function_traits の完全な実装をどのように実装できますか ?
c++ - アリティ (またはコンパイル時に既知のその他の情報) に応じて、関数オブジェクトを異なる方法で呼び出す方法は?
関数テンプレートでは、アリティ (引数の数) に応じて、関数または関数オブジェクトを別の方法で呼び出したいと思います。擬似コード:
これはC++でどのように行うことができますか?
編集難しさを明確にするために:引数が 2 つしかf(x, y, z)
ない場合はコンパイルされずf
、逆に引数が 3 つ必要なf(x, y)
場合はコンパイルされませんf
。
macros - 再帰マクロ アリティ例外
機能がスレッド化マクロに似ている (と思う) マクロを作成しようとしていますが、これにより、前のフォームの挿入が行われる場所にキーワードを指定できます。clojure.walk/prewalk-replace を使用する予定でしたが、clojure.lang.ArityException が発生しました。コードは次のとおりです。
しかし、単体テストを適用しようとすると:
以下を生成します。
私は何を間違っていますか?
clojure - Clojureのマルチアリティ定義 - 最初のマッチファーストサーブ?
具体的には、次の状況で何が起こると考えられていますか。
つまり、ゼロ除算ではなく、常に 0 を返すように clojure に頼ることはできますか?
scala - リストのScala抽象値メンバーが予期しない結果を返しますか?
これがバグなのか、Scala を十分に理解していないのかはわかりません。今日、いくつかのリスト関数を使って REPL で遊んでいました。これが私がしたことです:
まず、リストを作成しました。
次に、別の double を先頭に追加して、別のリストを作成しました。
ここで、newMyList で productArity (List.productArity) を要求すると、次のようになります。
最初のリストを他のリストとは異なる方法で扱っているようです。これは意図した動作ですか、それともバグですか?
0、1 より大きい要素にアクセスしようとすると、java.lang.IndexOutOfBoundsException が発生することに注意してください。2 は 2.0 を返し、3 は 3.0 を返す必要がありますよね?
function - Elixir: アリティの異なる関数のオーバーロード
異なるアリティを持つオーバーロード関数を定義する方法はありますか?たとえば、C# では次のようにできます:
また
Elixir では、これを行う唯一の方法は、それらを別々のモジュールに入れることです。それを回避する方法はありますか?
編集:私は間違った仮定をしていました。私が見たオーバーロードされた関数の例はたまたま同じアリティを持っていたので、(誤って) これが要件であると想定しました。関数は名前とアリティによって一意に識別されるため、実際には異なるアリティで関数をオーバーロードできます。
scala - Scala: 引数リストの一部としてタプルをアンパックする
別のメソッドの引数リストの一部として、メソッド呼び出しのタプルの結果を送信しようとしています。
対象方法
メソッドからの戻り、部分的な引数リスト
つまり、 を呼び出そうとしていますprintResult(String, (Int, Long, Long))
。メソッドの戻り値の署名がメソッド呼び出しと一致する場合、使用できたはずです
これにより、構文エラーが発生します
回避策
タプルを手動で解凍してから、メソッドを呼び出すときにそれを使用することに頼っています
引数リストの一部としてタプルをアンパックして送信するよりエレガントな方法はありますか?
参考文献
タプルをパラメーター リストとして使用してメソッドを呼び出す