我不知道如何最好地解决长生不老药的问题,但给出了一个编号,使其像[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
答案 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_list
和outer_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
那样简洁,但是用途更多。