defmultiとdefmethodについて重要な点がありません。私はdefmultiのいくつかの本の説明を読んだが、私はまだ混乱している。Clojure defmulti/defmethodの作成
私はそれがトランザクションまたは私は(ランダム-VAL)を呼び出すと、どちらかの役に立つ-transの値またはランダム小数量を取り戻すしたい100.00
ような量だかどうかに応じて、ランダムな値を取得したいです。私は地図に関数を入れて実験しましたが、avail-trans、\ Bと同じ値を返します。
(def^:dynamic map-val {:trans (random-trans) :amt (random-amount)})
ここでは、私がやっていることが動作していないことを示す最小のコードです。私は指針や助けに感謝します。
(def^:dynamic avail-trans [\B \W \D \A])
(defn random-trans
[]
(nth avail-trans (.nextInt random (count avail-trans))))
(defn random-amount
[]
(float (/ (.nextInt random (count (range 1 10000))) 25)))
次は、正しく構築されていませんが、私はよく分からない理由や問題解決方法:
(defmulti random-val :val-type)
(defmethod random-val :trans []
(random-trans))
(defmethod random-val :amt []
(random-amount))
このエラーで(random-val :trans)
結果の呼び出し:
れるjava.langを。 IllegalArgumentException:ディスパッチ値のマルチメソッド 'random-val'のメソッドがありません:null(NO_SOURCE_FILE:0)
私は非常に多くの答えを感謝しています。 ClojureのWebサイトで見た2つの答え(これまでのところ)は、私が見たよりも優れています。賢明な男は意図していませんでしたが、Clojureは私には「村に行く」という言語/学習体験のひとつと思われます。私はすべての答えを聞いて何かを得る。 – octopusgrabbus
私はこの特定の例をマルチメソッドに使用しないように納得しましたが、あなたが示したように私の例を並べ替えると、私はそれをどのように呼び出すでしょうか? – octopusgrabbus
あなたが何を求めているのかよく分かりません。マルチメソッドを使いたければどうしますか?上に書いたコードはあなたが意図したとおりに動作するはずです。 – Isaac