Elixir version of a safe navigation operator? (navigating nil in maps/structs)

@josevalim I don’t believe that is true.

If you have something like this:

o = %OuterStruct{
  inner: %InnerStruct{
    field: 1
  }
}

get_in o, [Access.key(:inner), Access.key(:field)] #returns 1

o = %OuterStruct{
  inner: nil
}

get_in o, [Access.key(:inner), Access.key(:field)]
# returns
** (BadMapError) expected a map, got: nil
    (elixir 1.12.3) lib/map.ex:464: Map.get(nil, :pairing, :a)
    (elixir 1.12.3) lib/access.ex:459: anonymous fn/5 in Access.key/2

This happens because Access.key returns default only for a missing key. The :inner key is not missing, it is just set to nil so it is passed to next accessor.

1 Like