case y guardas en Elixir
Una sola expresión case clasifica lecturas de sensor en tres resultados por forma y tamaño.
defmodule Gauge do
# case tries each pattern in order; when bolts a guard onto a clause.
def check(reading) do
case reading do
{:ok, temp} when temp >= 100 -> "boiling at #{temp} C"
{:ok, temp} -> "steady at #{temp} C"
{:error, why} -> "sensor down: #{why}"
end
end
end
IO.puts(Gauge.check({:ok, 104}))
IO.puts(Gauge.check({:ok, 21}))
IO.puts(Gauge.check({:error, "loose wire"}))
Cómo funciona
case reading doprueba cada patrón en orden y devuelve la rama que encaja.{:ok, temp} when temp >= 100coincide con la misma forma que la cláusula siguiente, pero solo pasada su guarda.{:error, why}atrapa la tupla de falla y reporta la razón.
Palabras clave y builtins usados aquí
casedefdefmoduledoend
El intento, en números
- Líneas
- 14
- Caracteres a escribir
- 380
- Tokens
- 105
- Ritmo de tres estrellas
- 75 tpm
Al ritmo de tres estrellas de 75 tokens por minuto, este intento toma unos 84 segundos.
Paso 3 de 3 en Coincidencia de patrones; paso 6 de 27 en Fundamentos del lenguaje.