問題タブ [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.
clojure - 型ヒントを使用して、可変数の引数を持つ Clojure マルチメソッドを作成する方法は?
タイプヒントを使用して、2 つの単一引数メソッドを区別しようとしています。
たとえば、add-vertex は可変数の引数を取ることができる Java メソッドをラップしているため、ここでは add-vertex が 0、1、または 2 個の引数を取るようにしようとしています...
単一引数関数が 2 つあることに注意してください。それぞれが異なる型をとります (id は Java Integer で、props は Java Map です)。私はClojureが初めてなので、これは完全に間違っていると思います。
clojure - アリティでClojureマルチメソッドをオーバーロードすることは可能ですか?
マルチメソッドを使用するコードがあり、理想的には関数 (この場合はマルチ関数) をオーバーロードして、たとえばテストに役立つ高次関数を渡すことができるようにしたいと考えています。
次に例を示します。
したがって、私のdefnはアリティのオーバーロードを提供しますが、defmethodがこのようなものをサポートしているかどうか疑問に思っています。(defmethod 宣言ごとに実行したくないと思います。)
これは最も適切な (あえて言いますが、慣用的な) アプローチですか、それとももっと良い方法がありますか?
clojure - ベクター ツリーのトラバース
ヒカップ データ構造を表すベクター ツリーをトラバースしたい:
次に、ベクトルのキーワードでディスパッチしたいのですが、キーワードにマルチメソッドが定義されている場合、別のベクトルのセットが返され、元のタグが置き換えられます。
たとえば、上記の構造は次のように変換されます。
カスタム マルチメソッドは、リスト ("hello" "hi") をパラメーターとして受け取ります。次に、ボタンを含む div を返します。
ベクトルをトラバースし、フォーム内の他のすべてをパラメーターとしてキーワードでディスパッチし、現在のフォームを返されたフォームに置き換える関数を作成するにはどうすればよいですか?
.net - F# ポリモーフィズム
レコード型に関して F# でポリモーフィズムを処理する方法はありますか?
例を挙げると、番地の住所とボックスの住所の 2 つのレコード タイプの住所があるとします。振る舞いに関しては、パターンマッチングで対処できると思います。しかし、参照についてはどうですか、他のレコードから両方のタイプを参照する(オブジェクト参照を意味するのではなく)方法はありますか
clojure - プリミティブ型にマルチメソッドをディスパッチする方法は?
プログラムがプリミティブ型とそのラッパークラスの間で異なる動作をするようにしたいのです。次に例を示します。
しかし、私は整数と整数の両方を試しますが、それは機能しません
では、プリミティブ型にマルチメソッドをディスパッチすることは可能ですか?
======編集======
私はグーグルグアバをclojureに包んでいました。ブール値、Dobules、Intsなどのプリミティブライブラリがあります。それらにはいくつかの共通のメソッドがあるので、マルチメソッドを試してみたいと思います。
types - 既存のマルチメソッド実装にディスパッチを強制するにはどうすればよいですか?
別の名前空間 (変更できないライブラリ) のマルチメソッドを宣言すると、自分の型の ns-a が次のようになります。
ns-a で定義されている X の既存のメソッドがあります。
ディスパッチ関数は
私のタイプ Y も X の場合、 Y の実装で X の実装にディスパッチするにはどうすればよいですか?
編集:ハックを見つけました:
clojure - Clojureマルチメソッド、データを追加する方法は?
まず、私はClojureを初めて使用するので、これはばかげた質問になる可能性があります。
学習演習として、私は些細なテキストアドベンチャーマルチメソッドシステムを機能させています。ここで、キーワードの使用から、「sack」、「sword」などの個々のインスタンスに関連するデータを保持できる「classiness」の形式に変更したいと思います。
defrecordここに行く方法はありますか?
質問:Clojureの派生を使用して、defrecordクラスタイプの階層を作成できますか?これに似ているように見えますが、受け入れられた答えは「いいえ、おそらくインターフェースを使用してください」と言っています。
答えは本当にノーですか?Clojureのマルチメソッドを使用するには、すべてのデータ表現をJavaクラスとして記述する必要がありますか?
ありがとう、
クリス。
作業コード:
以下は私がこれまでに試したことですが、最初はエラーが発生しますderive:
ClassCastException java.lang.Class cannot be cast to clojure.lang.Named clojure.core/namespace (core.clj:1496)。
scala - 「ポリモーフィズム アラカルト」とは何ですか? また、どのようにメリットを得ることができますか?
Simple Made Easyの講演で、Rick Hickey は「Polymorphism a la carte」(ビデオの 30:00 頃) について語っています。同じコンテキストで、彼は Haskell の型クラスと Clojure のマルチメソッド(およびプロトコル) についても言及しています。
私はこれらの概念にあまり詳しくないので、シンプルさを達成しようとするときの有用性を理解したいと思います。Scalaでのこの概念の例やショーケースに特に興味があります。
generics - 同じ型に対してマルチメソッドの複数の異なる実装を提供することは可能ですか?
単一のデータ型に対してマルチメソッドの複数の実装を作成するにはどうすればよいですか?
これは良い例ではないかもしれませんが、ネストされたベクトルを両方ともシーケンスとして扱うことができるという考えを示してくれることを願っています:
そしてツリーとして:
同じ型に対して複数のマルチメソッド実装を作成して使用する一般的な方法は何ですか?
clojure - Clojure のカスタム メソッドを使用してレコードをきれいに印刷する
Clojure 1.5.0 では、defrecord で定義された独自のレコード タイプにカスタムの pretty-printer を提供するにはどうすればよいでしょうか。
また、cutsom プリンターも使用したいと思いclojure.pprint/pprintます (今では、a説明のためにレコードのフィールドにあるものをきれいに印刷する必要があります)。