typestar

Desestructuración de mapas en Clojure

Lee un mapa de pedido por clave y aplica la misma forma a un parámetro con valor por defecto.

;; {:keys [...]} pulls several keys out of a map in one binding form.
(def order {:sku "CB-14" :quantity 3 :unit-price 12.5})

(let [{:keys [sku quantity unit-price]} order]
  (println (format "%s x%d = %.2f" sku quantity (* quantity unit-price))))

;; The same form works in a parameter list. :or supplies defaults for
;; keys the caller left out, and :as names the map that came in.
(defn describe-shipment
  [{:keys [carrier service] :or {service "ground"} :as shipment}]
  (format "%s by %s (%d fields)" carrier service (count shipment)))

(println (describe-shipment {:carrier "Pike Freight" :service "air"}))
(println (describe-shipment {:carrier "Pike Freight" :weight 40}))

Cómo funciona

  1. (let [{:keys [sku quantity unit-price]} order] vincula tres claves de una, cada local con el nombre de su keyword.
  2. describe-shipment desestructura su parámetro ahí mismo, y :or {service "ground"} cubre lo que quien llama omitió.
  3. :as shipment deja vinculado el mapa entrante, así (count shipment) informa cuántas claves llegaron.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
14
Caracteres a escribir
675
Tokens
97
Ritmo de tres estrellas
65 tpm

Al ritmo de tres estrellas de 65 tokens por minuto, este intento toma unos 90 segundos.

Escribe este fragmento

Paso 2 de 3 en Desestructuración; paso 20 de 27 en Fundamentos del lenguaje.

← Anterior Siguiente →