retag
のパラメータがmulti-spec
の作成にどのように影響するのですか?私はmulti-spec
のドキュメントを消化するのが難しいと感じています。ドキュメント文字列からs/multi-specのretagパラメータは何を意味しますか?
5
A
答えて
3
:
再タグ付けは マッチングタグで生成された値を再タグ付けするために生成時に使用されます。 retagは、 ディスパッチタグが関連付けられるキー、または生成された値のfn、および適切にタグ付けされた値を返すべき ディスパッチタグのキーのいずれかです。
retag
場合はmulti-spec
が内部発生実装関数で使用される関数hereを作成し、(spec guide exampleのように)キーワードです。例えば、これら2つのマルチ仕様宣言は、機能的に同等です:
retag
機能を渡す
(s/def :event/event (s/multi-spec event-type :event/type))
(s/def :event/event (s/multi-spec event-type
(fn [genv tag]
(assoc genv :event/type tag))))
は、ガイドの例で与えられた非常に便利なオプションのように見えるが、非のためmulti-spec
を使用する場合に、より便利ではありませんでしょうマップ。たとえば、multi-spec
をs/cat
としたいとします。関数引数を仕様に:
(defmulti foo first)
(defmethod foo :so/one [_]
(s/cat :typ #{:so/one} :num number?))
(defmethod foo :so/range [_]
(s/cat :typ #{:so/range} :lo number? :hi number?))
foo
は、最初の引数に応じて、2つのまたは3引数を取ります。我々は単純s/cat
キーワード/タグを使用してmulti-spec
にこれをしようとすると、それは動作しません。
(s/def :so/foo (s/multi-spec foo :typ))
(sgen/sample (s/gen :so/foo))
;; ClassCastException clojure.lang.LazySeq cannot be cast to clojure.lang.Associative
これはretag
関数を渡すことができるということは有益であるところです。
(s/def :so/foo (s/multi-spec foo (fn [genv _tag] genv)))
(sgen/sample (s/gen :so/foo))
;=>
;((:so/one -0.5)
; (:so/one -0.5)
; (:so/range -1 -2.0)
; (:so/one -1)
; (:so/one 2.0)
; (:so/range 1.875 -4)
; (:so/one -1)
; (:so/one 2.0)
; (:so/range 0 3)
; (:so/one 0.8125))
関連する問題
- 1. Wikipedia APIの応答のパラメータは何を意味しますか?
- 2. C++のパラメータ型と&&は何を意味しますか?
- 3. このパラメータ型制約は何を意味しますか?
- 4. CGPathAddCurveToPointのパラメータは何を意味しますか?
- 5. pythonのパラメータ(-1)は何を意味しますか?
- 6. パラメータ化された型は何を意味しますか?
- 7. (+ var)は何を意味しますか
- 8. IndexOutofRangeExceptionは何を意味しますか?
- 9. getActivity()は何を意味しますか?
- 10. .html()は何を意味しますか?
- 11. force_reloadは何を意味しますか?
- 12. UnmappableCharacterExceptionは何を意味しますか?
- 13. バックスラッシュは何を意味しますか?
- 14. !viは何を意味しますか?
- 15. {}は何を意味しますか?
- 16. フラットは何を意味しますか?
- 17. *は何を意味しますか?
- 18. {login}は何を意味しますか
- 19. 「ネットワークパフォーマンス」は何を意味しますか?
- 20. javascript:voidは何を意味しますか?
- 21. new()は何を意味しますか?
- 22. エラーメッセージは何を意味しますか?
- 23. 「暗黙の匿名クラスのパラメータ」とは、この意味で何を意味しますか? Androidのメーカーで
- 24. ./setup.pyをインストールするための--install-baseパラメータは何を意味しますか?
- 25. JoomlaのgetApplicationのパラメータ 'site'は何を意味していますか?
- 26. メソッド宣言のパラメータ名の前に '@' charとは何を意味しますか?
- 27. PreparedStatementのこれらの値/パラメータは何を意味しますか?
- 28. pythonのパラメータの意味の中のコロンは何ですか?
- 29. NSDecimalAdd() - constの意味は何を意味するのですか?
- 30. Elixirの関数パラメータで二重バックスラッシュは何を意味しますか?
は素晴らしいいただきありがとうございます説明と例! – OlegTheCat