Исключить результаты из списка понятий в эликсире - PullRequest
0 голосов
/ 18 ноября 2018

У меня есть простое понимание списка:

for x <- [some_list] do
  case _compute(x) do
    nil -> nil # directly exclude this value from output
    val -> val # add this value to output as usual
  end
end

Если не считать полного понимания, а затем отфильтровать nil значения, то лучше было бы это сделать?

1 Ответ

0 голосов
/ 18 ноября 2018

Понимания встроенные фильтры поддержки, генераторы, сопоставление с образцом и несколько предложений.

Фильтр nil значения:

for x <- list, !is_nil(x), do: x

Вызовите новую функцию для каждого значения (и автоматически отфильтруйте nil):

for x <- list, y = _compute(x), do: y

Пример:

iex> list = [1, 2, 3, nil, 4, 5, 6, nil, 7, 8, nil, 9, nil, 0]
iex> for x <- list, !is_nil(x), do: x
# => [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]

iex> compute = fn x -> if x > 5, do: x end
iex> for x <- list, y = compute.(x), do: y
# => [6, 7, 8, 9]
...