問題タブ [multimethod]

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

clojure - Clojure マルチメソッドの定義

私は1つの名前空間で次のように言っていますshapes:

shapes名前空間で次を実行します。

戻りますtrue。しかし、実際に描画用のマルチメソッドを実装している名前空間で次を実行すると、

戻りますfalse。そのため、正しいマルチメソッド ディスパッチ関数が配置されていても、「ディスパッチ関数が見つかりません」というエラーが表示されます。

何か不足していますか?すべてのタイプのシェイプを 1 つの巨大な名前空間に実装することは、私には無意味に思えます。

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

oop - マルチディスパッチとマルチメソッド

それらは何ですか、それらの間の違いは何ですか?

ウィキペディアのような多くの情報源は、それらは同じものであると主張していますが、この質問のsbiのように、他の情報源は明示的に反対のことを言っています:

最初:「ビジターパターンは、C++でのダブルディスパッチをシミュレートする方法です。」これは、えーと、完全には正しくありません。実際、ダブルディスパッチはマルチディスパッチの1つの形式であり、C ++で(欠落している)マルチメソッドをシミュレートする方法です。

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

clojure - Java クラスでのみ Clojure マルチメソッドを使用できますか?

Java クラスで表される clojure 構造に対してのみ clojure マルチメソッドを使用できるのか、それとも構造体またはその他のプロパティに対してディスパッチするためにマルチメソッドをベースにできるのかについて、少し混乱しています。

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

clojure - Clojure の Type とプロパティの両方でマルチメソッドをディスパッチできますか?

Clojure アプリケーションに「visualize」というメソッドがあり、アプリケーションの任意の部分をレンダリングできると思われます。私が抱えている問題は、アプリケーション内の一部が Java クラスであり、一部がハッシュマップであり、フィールドが内部的に clojure :: イディオムを使用してマップのタイプをマークしていることです。マルチマップを使用してタイプまたは内部タイプでディスパッチできることは知っていますが、同じマルチメソッドが両方で機能するようにするにはどうすればよいですか。

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

clojure - Clojureの派生物を使用して、defrecordクラスタイプの階層を作成できますか?

私は次のようなことをしたいと思います:

これは可能ですか?

アップデート:

それ以来、これは不可能であることに気付いたので、次のようなことをしています。

これは理にかなっていますか、それとももっと良い方法がありますか?

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

c++ - c++ にマルチメソッドがないのはなぜですか?

C ++でマルチメソッドを実装する方法に関する多くの記事を読みました:

  1. http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1529.html
  2. http://www.codeproject.com/KB/recipes/mmcppfcs.aspx
  3. http://lambda-the-ultimate.org/node/2590
  4. http://parasol.tamu.edu/people/peterp/omm/

c++ にマルチメソッドがないのはなぜですか?

c++ 標準でサポートされないのはなぜですか?

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

java - Java の優れたマルチメソッド実装はありますか?

Lisp のように Java 用の合理的に優れたマルチメソッドの実装/ライブラリがあるかどうか疑問に思っています。

私はこれだけ明らかに凍っているものを見つけました: JMMF

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

recursion - 自己再帰的な clojure multimethod は、入れ子になった分類の問題に適した設計ですか?

大量のデータ マップがあり、各マップをネストされた方法で分類する必要があります。

つまり、与えられたアイテムは A または B (関数によって決定される) である可能性があり、B の場合は C または D (別の関数によって決定される) である可能性があり、以下同様です。各段階で、分類に関連するより多くのデータが各マップに追加される場合があります。分類を行う関数自体は非常に複雑であり、決定を行うために追加のデータを取り込む必要がある場合があります。

自己再帰的マルチメソッドは、これを行うコードを構成する良い方法でしょうか? アイテムについてこれまでに決定された最も具体的なタイプで発送するか、それ以上何もできない場合は現在の最良の分類を返します.

単一の分類関数内にネストされた if を使用して目的の効果を得ることができましたが、まあ、それは醜いです

マルチメソッドはここに適していますか、それとも物事を複雑にしすぎていて、コードを構造化するより簡単な方法がありませんか?

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

clojure - クラスORキーワードのClojureマルチメソッド

私がこのマルチメソッドを持っているとしましょう

のサブクラスで呼び出すとObject、最初の実装に正しくディスパッチされます。

それで:mykwdそれはまた期待通りに働きます:

しかし、別のキーワードを指定すると、例外が発生します。

このディスパッチはどの程度正確に機能しますか?

クラス継承のためにこの動作を維持し、すべてのキーワードをキャッチする「デフォルト」の実装を維持することは可能ですか?

編集この例は単純ですが、バイナリ関数で動作するために必要です。私の本当の必要性は以下の通りです。どうすれば応募できるのかわかりません:default

それから私はそれが何であるかという場合のためにそれを定義する方法を探していargます。これは、の値がクラスの場合に機能しますが、キーワードの場合は機能しません。nil(:type mp):type

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

performance - 本質的にclojureマルチメソッドは遅いですか

私はclojure.core 関数の再グループ化を見ていました:

そして、マルチメソッドとして書き直した方が「良い」と思いました:

それでも、時間を比較すると、書き換えが 4 倍遅いことに驚きました。

これはマルチメソッドの自然な結果ですか、それとも他に何か問題がありますか?