Today I Learned

hashrocket A Hashrocket project

Append To A Keyword List

If you have two keyword lists, you can append them like so:

> a = [a: 1]
[a: 1]
> b = [b: 2]
[b: 2]
> a ++ b
[a: 1, b: 2]

But what if something a bit more programmatic is happening and you are building up the additions to the keyword list based on variables?

> x = :x
> c = a ++ [x 5]
** (CompileError) iex:5: undefined function x/1
    (stdlib) lists.erl:1353: :lists.mapfoldl/3
    (stdlib) lists.erl:1354: :lists.mapfoldl/3

That makes elixir think x is some function when in fact it is just a variable containing the keyword :x.

Simply adding a comma doesn't quite do it either.

> c = a ++ [x, 5]
[{:a, 1}, :x, 5]

We need to wrap the internal part with curly braces to create the tuple that can then be appended to a.

> c = a ++ [{x, 5}]
[a: 1, x: 5]
See More #elixir TILs
Looking for help? At Hashrocket, we 💜 Elixir! From our many Elixir client projects, to sponsoring the Chicago Elixir Meetup, to the source code for this application, we are invested in this community. Contact us today to talk about your Elixir project.