Когда вы вызываете Enum.map
в списке ключевых слов, вы просматриваете наборы {key, value}
, один за другим.Что вызывает ошибку ** (FunctionClauseError) no function clause matching
.
Это зависит от того, что вы хотите в результате.Если вы хотите подмножество списка ключевых слов, в качестве списка ключевых слов, вы можете сделать
[what: "country", url: "asdf", matches: "AQ"]
|> Keyword.take([:what, :url])
, который будет возвращать [what: "country", url: "asdf"]
Если вы хотите вместо этого карту в результате, выможете использовать решение, предложенное выше: @ denis.peplin
Если по какой-то причине вы все еще хотите или должны сделать это, используя Enum.map
и сопоставление с образцом, вы можете сделать что-то вроде:
[what: "country", url: "asdf"]
|> Enum.map(fn
{k, _v} = tup when k in [:what, :url] -> tup
_ -> nil
end) |> Enum.reject(&is_nil/1)