問題タブ [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 に答える
157 参照

arrays - 次元を制限せずに関数の引数の型を指定するにはどうすればよいですか?

Julia では、関数の引数の型を配列の配列として指定したいと考えています。ので、私は持っています

しかし、REPL で引数を設定するとx、たとえば次のようになります。

次に、ディメンションを含む次の型割り当て (たとえば) を自動的に取得します。

エラーが発生するように

配列の次元をまったく制限したくないので、解決策はおそらく次のようなものだと考えていました

しかし、これもうまくいきません。

引数の型を配列の配列に指定するにはどうすればよいですか?

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

julia - 2 つのファイルでの関数のオーバーロード (Julia)

最小限の例で私の問題を説明します。次の 3 つのファイルがあるとします。

A.jl

B.jl

Main.jl

ここでは、f関数の 2 つのバージョンがあります。複数のディスパッチの考え方を正しく理解していれば、実行時にどのバージョンを使用すべきかを差し引く必要があります。したがって、Main.jl を実行するとf called with A. 残念ながら、私は得る

コメントアウトするusing Bと、正常に動作します。明らかにf、B.jl から A.jl を上書きfしました。

では、問題は次のとおりです。問題はどこにあるのでしょうか。私のアプローチまたは使用する Julia のバージョン (0.3.7) では? どうすればこれを回避できますか?

完全修飾名 (例: ) に置き換えusing Aて使用することは、適切な解決策ではないことに注意してください。これは、複数のディスパッチの要点と矛盾します。コンパイル時に、またはを使用する必要があるかどうかわかりません。import AA.fA.fB.f

0 投票する
3 に答える
634 参照

oop - 複数の派遣: 概念上の必要性?

複数のディスパッチの概念(つまり、仮想メソッドの動的ディスパッチがメソッドの引数にも拡張されているかのような組み込みサポート) をオブジェクト指向言語に含める必要があるかどうか疑問に思います。無視できる。

問題

次のシナリオを考えてみましょう: 動物の種類を含む (必ずしも平坦ではない) クラス階層があります。コード内のさまざまな場所で、動物オブジェクトに対していくつかのアクションを実行したいと考えています。このオブジェクト参照がどのように取得されるかは気にしませんし、制御することもできません。動物のリストをトラバースすることで遭遇するかもしれませんし、メソッドの引数の 1 つとして与えられるかもしれません。実行したいアクションは、特定の動物のランタイム タイプに応じて特化する必要があります。そのようなアクションの例は次のとおりです。

  • GUI で表示するために、動物のビュー モデルを構築します。
  • このタイプの動物を表すデータ オブジェクトを作成します (後で DB に格納します)。
  • 動物にエサを与えますが、動物の種類に応じて異なる種類のエサを与えます (動物にとってより健康的なもの)。

これらの例はすべて動物オブジェクトのパブリック API で動作しますが、それらが行うことは動物自身のビジネスではないため、動物自体に組み込むことはできません。

ソリューション

1 つの「解決策」は、型チェックを実行することです。しかし、このアプローチはエラーが発生しやすく、リフレクション機能を使用します。これは (私の意見では) ほとんどの場合、設計が悪いことを示しています。型はコンパイル時の概念のみであるべきです。

もう 1 つの解決策は、ビジター パターンを「悪用」(一種) して、二重ディスパッチを模倣することです。しかし、これには、訪問者を受け入れるように動物を変更する必要があります。

他のアプローチがあると確信しています。また、拡張の問題にも対処する必要があります。新しいタイプの動物がパーティーに参加した場合、いくつのコード位置を適応させる必要があり、どうすればそれらを確実に見つけることができますか?

質問

では、これらの要件に照らして、適切に設計されたオブジェクト指向言語に複数ディスパッチを組み込むべきではないでしょうか?
特定のオブジェクトの動的タイプに依存する外部 (内部だけでなく) アクションを作成するのは自然なことではありませんか?

よろしくお願いします!

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

julia - Julia はマルチメソッドをどのように実装していますか?

http://c2.com/cgi/wiki?ImplementingMultipleDispatchから少し読んでいます

Julia がマルチメソッドを実装する方法についてのリファレンスを見つけるのに苦労しています。ディスパッチの実行時の複雑さはどのくらいで、どのように達成するのですか?

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

c++ - 参照によるポリモーフィズムとスライス

C++ でのオブジェクトのスライスを完全には理解していませんでした。次のコード例では、2 つのオブジェクトが同じ処理を受けているように見えますが、ポリモーフィズムが機能するのはそのうちの 1 つだけです。

参照を使用していますが、オブジェクトの 1 つがスライスされていないようです。launch_ship 関数の呼び出し中に何かが起こるに違いないと思いますが、何が問題なのか正確にはわかりません。

これがサンプルコードです。

output : あの低い宇宙船を操作したくない!

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

f# - さまざまなタイプの複数の関数を辞書にエンコードする方法

F# でインタープリターを作成しています。私は賢く、プリミティブ演算子の解釈を関数呼び出し (この場合はリダクション) として一般化しようとしています。

これがアイデアです:

だから私は後でこれを行うことができます:

もちろん、型チェッカーはこれを拒否します

警告 FS0064: この構成により、コードは型注釈で示されるよりも一般的ではなくなります。型変数 'T は型 ''a -> 'a -> 'a' になるように制約されています。エラー FS0001: タイプが一致しません。a ('a -> 'a -> 'a) -> ('a -> 'a -> 'a) -> 'a -> 'a -> 'a を期待しているが、a ('a -> 'a -> 'a) -> 'a ''a' と '('a -> 'a -> 'a) -> 'a -> 'a -> 'a' を統合すると、結果の型は無限になります。

PD: 単純なインタープリターとしてこれを行う方法は知っていますが、それぞれに MATCH を作成することなく、汎用的な方法で数十のメソッドを構築できるソリューションを構築しようとしています。