typestar

Varargs y mapas de opciones en Clojure

Suma cualquier cantidad de argumentos, expande un vector en ellos y rellena un rótulo con opciones.

;; & collects any trailing arguments into a sequence, so one defn
;; accepts as many as the caller cares to pass.
(defn total [& amounts] (reduce + 0 amounts))
(println (total 5 10 15))

;; apply spreads a collection back out into those argument slots.
(def readings [12 7 19 4])
(println (apply total readings))

;; An options map keeps settings named instead of positional;
;; destructure it with :keys and fill the gaps with :or.
(defn pad-label
  [text & {:keys [width fill] :or {width 12 fill \.}}]
  (apply str text (repeat (max 0 (- width (count text))) fill)))

(println (pad-label "cotton"))
(println (pad-label "cotton" :width 20 :fill \-))

Cómo funciona

  1. (defn total [& amounts] (reduce + 0 amounts)) junta todos los argumentos finales en una sola secuencia.
  2. (apply total readings) pasa los elementos de readings como argumentos posicionales sueltos.
  3. pad-label acepta & {:keys [width fill] :or {width 12 fill \.}}, así que :width 20 se pasa por nombre.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
17
Caracteres a escribir
646
Tokens
107
Ritmo de tres estrellas
70 tpm

Al ritmo de tres estrellas de 70 tokens por minuto, este intento toma unos 92 segundos.

Escribe este fragmento

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

← Anterior Siguiente →