diff --git a/lib/elixir/lib/access.ex b/lib/elixir/lib/access.ex index cd9e791d34b..a06d20384b1 100644 --- a/lib/elixir/lib/access.ex +++ b/lib/elixir/lib/access.ex @@ -31,8 +31,13 @@ defimpl Access, for: List do """ - def access(list, atom) when is_atom(atom) do - Keyword.get(list, atom) + def access([], _key), do: nil + + def access(list, key) do + case :lists.keyfind(key, 1, list) do + { ^key, value } -> value + false -> nil + end end end diff --git a/lib/elixir/test/elixir/access_test.exs b/lib/elixir/test/elixir/access_test.exs index fdc0854fc50..8744afe7c2f 100644 --- a/lib/elixir/test/elixir/access_test.exs +++ b/lib/elixir/test/elixir/access_test.exs @@ -7,6 +7,9 @@ defmodule AccessTest do assert [foo: :bar][:foo] == :bar assert [foo: [bar: :baz]][:foo][:bar] == :baz assert [foo: [bar: :baz]][:fuu][:bar] == nil + assert [{"foo", :bar}]["foo"] == :bar + assert [{"foo", [{"bar", :baz}]}]["foo"]["bar"] == :baz + assert [{"foo", [{"bar", :baz}]}]["fuu"]["bar"] == nil end test :nil do