問題タブ [multiple-dispatch]

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 投票する
1 に答える
1295 参照

methods - ジュリアはどのような方法を使用しましたか?

次の変数を定義しました

これは、各行が同じ数値に等しく、列の数値が 1 から 10 まで 1 ずつ増加する行列を定義します。 関数 に Julia を使用した方法を知りたいです*。ジュリアにどうやって頼めばいい?

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

scala - パラメータ化された関数を使用した Scala 動的ディスパッチ

このコードを機能させるにはどうすればよいですか?

私の知る限り、Scala には動的ディスパッチがありません (Java と同様)。どういうわけか動的ディスパッチをシミュレートすることは可能ですか?

または、最善の解決策は何ですか?

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

oop - Juliaで大量の定型文を新しいタイプで回避するにはどうすればよいですか?

NamedArraysおよびImagesで定義されているものと同様の型を作成することを検討しています。基本的に、メタデータの一部を含む配列が必要だとしましょう。たとえば、配列をディスクに書き込むときに、ファイルの先頭に書き込むわかりやすい名前を付けます。(この詳細は関係ありません。例を考えているだけです。)

だから私はするかもしれません

または何か、他の動作は基本配列動作と異なる必要はありません。

私の頭の中では、配列を操作するすべての既存の関数dataがこの型のフィールドを操作することを望んでいるのは「明らか」です。Java などの別の言語では、Array をサブクラス化nameし、インスタンス フィールドとしてサブクラスに追加しただけで、既存のすべての Array 操作との互換性が自動的に維持されます。しかし、Julia で上記のような解決策を試してみると、リンクされたパッケージで @TimHoly と 'davidavdav' が行ったように、さらに多くの関数を定義する必要があります。

もちろん、これらの関数のいくつかを手で書き出すことを余儀なくされることは、考えもしなかったことを実現するのに役立つことは承知しています。たとえば、MyNamedArray上記の例では、 の名前を定義していないことを指摘して異議を唱えることができますx::MyNamedArray * y::MyNamedArray。しかし、それを気にせず、ボイラープレートをあまり使わずに「ただ動く」コードが必要な場合はどうすればよいでしょうか。(たとえば、シンボルをループして NamedArraysに新しいメソッド定義をプッシュし、 Imagesに 100 行の定義を手動で書き出すことを参照してください。これらの定義の大部分はボイラープレート/「明白な」定義です。)

具体的には、私が引用した例を続けるとMyNamedArray、デフォルトは でx*yはなくなりますMyNamedArray。つまり、すべての関数は、基礎となるデータに同じ関数を適用するという「継承された」動作にデフォルト設定されるだけなので、すべての pre のメタデータを忘れることができます。 -既存の機能。

注意してください、Tomas Lycken の回答here は洞察に満ちていると思います。また、質問と回答hereも同様です。

私が思いつく最良の統合は、「それを吸い上げて関数を書き出すか、それを行うマクロを書くだけでよい」というものです。もしそうなら、そうです。より良いオプション、特にソリューションを設計してよりジュリアンにし、ボイラープレートを回避するためのより良い方法がないかどうか疑問に思っています。

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

julia - シンボルを使用した汎用ディスパッチ

複数のディスパッチにシンボルを使用する方法があるかどうか疑問に思っていましたが、「キャッチオールメソッド」も含まれています。つまり、次のようなもの

2 番目のものは機能し、マニュアルの内容と一致します。最初のものをどのように機能させるのか疑問に思っています。

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

function - Julia v0.5+ での関数のディスパッチ

Julia 0.5 の変更ログによると、

各関数とクロージャーには独自の型があります。

これは、より詳細な情報を高次関数に提供できるようになったことを意味しますfoo(bar :: Function{Float64}) = ...か?barFunction

もしそうなら、そうする正しい方法は何ですか?そうでない場合、コンパイラが生成されたコードをより適切に最適化できる以外に、この変更の実際のインポートは何ですか? ティア。

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

performance - Julia: 複数のパラメータの効率

Juliaマニュアルの「パフォーマンスのヒント」セクションによると、複数のディスパッチに夢中になることはお勧めできません。定義している型に 3 つのパラメーターが必要なように見える状況に遭遇しました。これは、2 つの可能なタイプに対して 1 つのパラメーターのみを使用するという私の質問に関連しています。別のパラメーターを使用するだけでそこに提示された問題を解決できることに気づきましたが、私の型は次のようになります

これは、ディスパッチするパラメーターがいくつかあるため、パフォーマンスの観点からはお勧めできません。mytype の関数は 3 つのパラメーターでディスパッチされ、関数の引数は正しいですか?

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

common-lisp - 関数は複数のディスパッチ システムで変更可能ですか?

(ほとんどの?いくつかの?)複数のディスパッチ言語では、プログラムの実行のある時点で各メソッドが関数に追加されることを正しく理解しました。

次に、機能としての複数のディスパッチにより、関数が変更可能になると結論付けることができますか?

すべてのメソッドが (ジェネリック) 関数に (ロード時に) 一緒にアタッチされている複数のディスパッチ言語があるので、異なる時点で異なる状態の関数を見ることができませんか?

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

c++ - C++ 複数ディスパッチ

次の問題があるとします。

へのポインタのリストを取得しましたInstrument

(たとえば)経由で楽器を追加する

ここで、リストを反復処理して、現在の楽器がピアノで、ギターである場合にinstruments呼び出します。これら 2 つの関数は大きく異なるため、 class で抽象化することはできません。doPiano()doGuitar()Instrument

問題は、C++ が Instrument実行時に型を識別できないことですよね (単一ディスパッチのため)。イテレータが指している現在のタイプに応じて、ピアノまたはギター関数を呼び出すようにするにはどうすればよいですか。

sthを実装できたら嬉しいです。この疑似コードのように動作します:

結果

実際、私は自分のアプローチでいくつかの問題に遭遇しました。この投稿を使用して多くのリファクタリングを行いました: How does one downcast a std::shared_ptr? . 助けてくれてありがとう:)