N'oublions pas que trusty old intovous permet de prendre tout ce qui est seqcapable (liste, vecteur, carte, ensemble, carte triée) et un conteneur vide que vous voulez remplir, et le met into.
(into [] '(1 2 3 4)) ==> [1 2 3 4] "have a lazy list and want a vector"
(into #{} [1 2 3 4]) ==> #{1 2 3 4} "have a vector and want a set"
(into {} #{[1 2] [3 4]}) ==> {3 4, 1 2} "have a set of vectors want a map"
(into #{} [{1 2} {3 4}]) ==> #{{1 2} {3 4}} "have a vector of maps want a set of maps"
intoest un wrapper autour conj, qui est l'abstraction de base pour insérer de nouvelles entrées de manière appropriée dans une collection en fonction du type de la collection. Le principe qui fait de ce flux est donc bien que Clojure est construit sur des abstractions composables , dans ce cas , intoau - dessus de conjau - dessus de la collecte et seq.
Les exemples ci-dessus seraient toujours bien composés si le destinataire était passé au moment de l'exécution: parce que les abstractions sous-jacentes ( seqet conj) sont implémentées pour toutes les collections (et de nombreuses collections Java également), donc les abstractions supérieures n'ont pas à s'inquiéter à propos de nombreux cas particuliers liés aux données.