typestar

Aridades múltiples en Clojure

Una función de riego con aridad por defecto, más un armador de rótulos variádico.

(require '[clojure.string :as str])

;; two arities: the short one fills in a default and calls the long one
(defn water
  ([bed] (water bed 2))
  ([bed liters]
   (str "watering " bed " with " liters "L")))

(println (water "tomatoes"))
(println (water "ferns" 5))

;; & gathers the leftover arguments into a seq, or nil when there are none
(defn label [bed & remarks]
  (str bed (when (seq remarks)
             (str " - " (str/join "; " remarks)))))

(println (label "beans"))
(println (label "beans" "shade cloth" "sow again in June"))

Cómo funciona

  1. ([bed] (water bed 2)) completa un valor por defecto y llama a la aridad de dos argumentos.
  2. La aridad más larga toma [bed liters] y arma el mensaje con str.
  3. [bed & remarks] junta los argumentos sobrantes en un seq que (seq remarks) revisa antes de unir.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
18
Caracteres a escribir
517
Tokens
99
Ritmo de tres estrellas
75 tpm

Al ritmo de tres estrellas de 75 tokens por minuto, este intento toma unos 79 segundos.

Escribe este fragmento

Paso 3 de 3 en Funciones; paso 9 de 27 en Fundamentos del lenguaje.

← Anterior Siguiente →