Es scheint, dass es keine gebacken werden in Lösung in Elixir. Also habe ich meine eigene zusammengerollt.
defmodule Maybe do
def and_then(nil, _), do: nil
def and_then(val,fnc), do: fnc.(val)
def and_get(struct, key), do: struct |> and_then(&(Map.get(&1, key)))
end
no_user = nil
without_contact_info = %{contact_info: nil}
with_contact_info = %{contact_info: %{address: "here"}}
no_user |> Maybe.and_then(&(Map.get(&1, :contact_info))) |> Maybe.and_then(&(Map.get(&1, :address)))
#> nil
without_contact_info |> Maybe.and_then(&(Map.get(&1, :contact_info))) |> Maybe.and_then(&(Map.get(&1, :address)))
#> nil
with_contact_info |> Maybe.and_then(&(Map.get(&1, :contact_info))) |> Maybe.and_then(&(Map.get(&1, :address)))
#> "here"
# or with the less generic `and_get`
with_contact_info |> Maybe.and_get(:contact_info) |> Maybe.and_get(:address)
#> "here"
Es ist wahrscheinlich nicht idiomatische Elixier aber es räumt meinen Code auf.
Ich glaube, Sie nur passende verwenden können Muster, die Situationen zu handhaben, wenn es ist, und es ist nicht 'phone_number' – JustMichael
@JustMichael Sie sollte das eine Antwort geben, da es die beste Lösung ist. –