Соответствие шаблону в списке ключевых слов - PullRequest
0 голосов
/ 22 февраля 2019

Я пытаюсь убрать определенные поля из списка ключевых слов.Я пробовал это, но я застрял.Что я делаю не так?

[what: "country", url: "asdf", matches: "AQ"]
|> Enum.map(fn([:what, :url, :matches]) -> [:what, :url] end)

Редактировать:

Предполагаемый вывод:

[what: "country", url: "asdf"]

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

Когда вы вызываете 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)
0 голосов
/ 22 февраля 2019
[what: "country", url: "asdf", matches: "AQ"]
|> Map.new()
|> Map.take([:what, :url])

Я не уверен, что это самый идиоматический способ.Вместо этого вы хотите использовать список ключевых слов?

Редактировать:

Ответ был опубликован до того, как было выполнено редактирование вопроса, поэтому он не очень актуален.

Если в качестве вывода необходим список ключевых слов, используйте Keyword.take.

...