使用添加新元素到列表

时间:2018-09-16 00:07:21

标签: functional-programming elixir

我不知道如何最好地解决长生不老药的问题,但给出了一个编号,使其像[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]那样打印其顺序:

n = 10
list = []
for i <- 0..n - 1, do: list = list ++ [i]
IO.inspect list

上面的代码向我返回:

warning: variable "list" is unused
    solution.ex:8

** (UndefinedFunctionError) function Solution.main/0 is undefined or private
    Solution.main()
    (elixir) lib/code.ex:677: Code.require_file/2

4 个答案:

答案 0 :(得分:6)

Elixir的变量的作用域仅限于它们所在的“块”。让我们看一下代码的样子。

n = 10
outer_list = []
for i <- 0..n - 1, do: inner_list = outer_list ++ [i]
IO.inspect outer_list

因此inner_list的值将始终为[] ++ [i],因为outer_list未被更改。当您将inner_listouter_list都命名为list时,就使变量变了阴影。意味着它具有相同的名称,但根据作用域而具有不同的值。您还会收到一条警告,指出inner_list并未在任何地方实际使用。

您可能想做的是

n = 10
list = for i <- 0..n - 1, do: i
IO.inspect list

不过,使用Enum.to_list/1可能会更好。

n = 10
list = Enum.to_list(0..n-1)
IO.inspect list

答案 1 :(得分:5)

尝试像这样使用list comprehensions

list = for i <- 0..(n - 1) do i end
IO.inspect list

答案 2 :(得分:1)

虽然@neisc给出了很好的答案,但我还是愿意:

<dom-module id="foo-two">
  <template>
    <foo-three id="addForm">
      <paper-button slot="button" on-tap="goToGrid">Cancel</paper-button>

      <div slot="card-content">
        <slot id="addSlot" name="card-content"></slot>
      </div>
    </foo-three>
  </template>
</dom-module>

在原始列表中添加一些内容,同时保留其可能已经包含的数据。

答案 3 :(得分:1)

我要再添加一个。

经典的Enum.map/2

n = 10
list = Enum.map(0..n-1, &(&1))
IO.inspect list

不像Enum.to_list/1那样简洁,但是用途更多。