Im very new to Functional Programmin and Elixir, I think it must be something very silly that I’m missing here but I cant seem to get a value from keyword list.
I have following code
defmodule Home4 do
def taskOne() do
colors = [{:black, "#000000"}, {:aqua, "#00FFFF"}, {:brown, "#A52A2A"}, {:green, "#008000"}, {:navy, "#000080"}, {:olive, "#808000"}, {:pink, "#FFC0CB"}, {:purple, "#800080"}, {:red, "#FF0000"}, {:yellow, "#FFFF00"}]
Home4.test(colors)
end
def test(keywordlist) do
input = IO.gets("Enter color name or code: ") |> String.trim()
if String.starts_with?(input, "#") do
keywordlist
|> Enum.find( fn {key, val} -> val == input end)
|> elem(0) |> IO.puts()
else
Keyword.get(keywordlist, input)
end
end
end
Home4.taskOne()
So if I enter “red” id like to get corresponding value, but I get following error instead. What is wrong ?
Enter color name or code: red
** (FunctionClauseError) no function clause matching in Keyword.get/3
The following arguments were given to Keyword.get/3:
# 1
[black: "#000000", aqua: "#00FFFF", brown: "#A52A2A", green: "#008000", navy: "#000080", olive: "#808000", pink: "#FFC0CB", purple: "#800080", red: "#FF0000", yellow: "#FFFF00"]
# 2
"red"
# 3
nil
Attempted function clauses (showing 1 out of 1):
def get(+keywords+, +key+, +default+) when +is_list(keywords)+ and -is_atom(key)-
(elixir 1.10.4) lib/keyword.ex:201: Keyword.get/3
(elixir 1.10.4) lib/code.ex:926: Code.require_file/2