Können Sie anhand von Beispielen erklären, wie retag
Parameter Auswirkungen multi-spec
Erstellung? Ich finde multi-spec
Dokumentation schwer zu verdauen.Was bedeutet der Parameter reag in s/multi-spec?
Antwort
Vom docstring:
retag wird bei der Generierung verwendet erzeugten Werte mit passenden Tags retag. retag kann entweder ein Schlüsselwort sein, bei dem der Versand-Tag zugeordnet wird, oder ein Fn des generierten Werts und Versand-Tags, die einen entsprechend retagged Wert zurückgeben sollen.
retag
Wenn ein Schlüsselwort (wie in den spec guide example) ist, erzeugt intern eine Funktion multi-spec
here, die in der Generator Umsetzung Funktion verwendet wird. Zum Beispiel dieser beide sind Multi-spec Erklärungen funktional äquivalent:
(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))))
Vorbei an eine retag
Funktion würde nicht wie eine sehr nützliche Option scheint Handbuch für das Beispiel gegeben, aber sinnvoller ist, wenn multi-spec
für nicht mit Karten. Wenn Sie z. B. multi-spec
mit s/cat
z.
(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
nimmt entweder zwei oder drei args, abhängig von der ersten Arg-: function args spec. Wenn wir multi-spec
versuchen naiv dies die s/cat
Stichwort/Tag verwenden, wird es nicht funktionieren:
(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
Dies ist, wo eine retag
Funktion zu übergeben zu können, ist nützlich:
(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. Was bedeutet der Code-Parameter in EXC_BAD_ACCESS?
- 2. Was bedeutet der Parameter (-1,) in Python?
- 3. Was bedeutet der _ Parameter in diesem Zusammenhang?
- 4. In Message.CreateMessage, was bedeutet der Parameter "action"?
- 5. Was bedeutet Template-Parameter-Liste der Template-Parameter
- 6. Was bedeutet der Parameter -clean in der Eclipse-IDE?
- 7. Was bedeutet der Parameter 'site' in Joomla getApplication?
- 8. Was bedeutet der Parameter `index` in Apache POI Blatt` getMergedRegion`?
- 9. Assert.fail (node.js): Was bedeutet Operator-Parameter?
- 10. NSDecimalAdd() - Was bedeutet das für den Parameter?
- 11. Linux chown -R Parameter, was bedeutet es
- 12. Was bedeutet der Objekttyp body in JavaScript?
- 13. Was bedeutet $$, $ ?, $^in der Powershell?
- 14. Was bedeutet "^ @" in der Datei?
- 15. Was bedeutet/#!/In der URL?
- 16. Was bedeutet :: in der Klassensignatur?
- 17. Was bedeutet der Punktoperator `.` (vor dem generischen Parameter)?
- 18. Was bedeutet der Parameter 'statement-id' von 'add-permission'?
- 19. Was bedeutet der requestedPublishingInterval in Milo?
- 20. Was bedeutet der Zeilencode?
- 21. Was bedeutet der Operator || =
- 22. Was bedeutet der Operator # ::?
- 23. Was bedeutet der Operator? =?
- 24. Was bedeutet $ in Ruby?
- 25. Was bedeutet der Typ?
- 26. Was bedeutet der "Operationsname"?
- 27. Was bedeutet der Operator &?
- 28. Was bedeutet [&] bedeutet in C++
- 29. Was bedeutet der Punkttrenner in Postgres-Konfigurationsparametern?
- 30. Was bedeutet zusätzlicher Parameter in dieser for-Schleife in Python?
Sie für große danken Erklärung und Beispiele! – OlegTheCat