typestar

Encadenamientos con with en Elixir

Una lista de despegue: with recorre el camino feliz de tuplas ok y else atrapa el primer fallo.

defmodule Launch do
  defp fuel(:full), do: {:ok, 100}
  defp fuel(_tank), do: {:error, :fuel_low}

  defp weather("clear"), do: {:ok, "clear"}
  defp weather(sky), do: {:error, {:sky, sky}}

  # with chains steps that must all match; else handles any miss.
  def go?(tank, sky) do
    with {:ok, pct} <- fuel(tank),
         {:ok, _} <- weather(sky) do
      "launch with #{pct}% fuel"
    else
      {:error, why} -> "scrubbed: #{inspect(why)}"
    end
  end
end

IO.puts(Launch.go?(:full, "clear"))
IO.puts(Launch.go?(:full, "storm"))

Cómo funciona

  1. fuel y weather devuelven cada una {:ok, ...} o {:error, ...}.
  2. with hace coincidir cada paso <- en orden; pasarlos todos llega al bloque do.
  3. La primera coincidencia fallida cae en else, que reporta por qué se canceló el despegue.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
20
Caracteres a escribir
490
Tokens
151
Ritmo de tres estrellas
70 tpm

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

Escribe este fragmento

Paso 2 de 3 en Control de flujo; paso 20 de 27 en Fundamentos del lenguaje.

← Anterior Siguiente →