【问题标题】:Accumulate a list in an `Enum.each` loop在“Enum.each”循环中累积列表
【发布时间】:2016-08-29 03:04:37
【问题描述】:

我有一个接收字符串列表并生成单词列表的方法。

def some(words) do
  result = []
  Enum.each(words, fn word ->
    result = result ++ [["something", word], ["something else", word]]
  end
  result
end

这个方法没有按预期工作,因为它总是返回一个空列表。

我认为这是因为可变阴影。

这段代码应该重写什么才能工作?

【问题讨论】:

    标签: list elixir


    【解决方案1】:

    elixir 中的变量是不可变的,因此您不能在循环中更改列表。有时它可能“看起来”变量是可变的,因为您可以重新分配它们,但这只会在同一范围内可见。

    为了得到想要的结果,你可以使用 Enum.flat_map/2 如下。

    def some(words) do
      Enum.flat_map words, fn word ->
        [["something", word], ["something else", word]]
      end
    end
    

    【讨论】:

      猜你喜欢
      • 2012-08-06
      • 2023-03-25
      • 1970-01-01
      • 1970-01-01
      • 2023-01-18
      • 1970-01-01
      • 2020-09-14
      • 2019-02-01
      • 2021-03-24
      相关资源
      最近更新 更多