なぜこの簡単なfor-loopでリストに記入できないのですか?forループを使ってリストを記入する
new_data = []
for data <- old_data do
new_data = List.insert_at(new_data, -1, data)
end
この操作の後、私のnew_data
リストは、ループが実行N倍であるにも関わらず、空のままです。
なぜこの簡単なfor-loopでリストに記入できないのですか?forループを使ってリストを記入する
new_data = []
for data <- old_data do
new_data = List.insert_at(new_data, -1, data)
end
この操作の後、私のnew_data
リストは、ループが実行N倍であるにも関わらず、空のままです。
エリクサーでは、Are Elixir variables really immutable?で説明しているように、変数が参照している値を変更することはできません。この例では "ループ"ではないので、list comprehensionです。
あなたはと理解の結果に割り当てることができます。
あなたのラインでnew_data = for data <- old_data do
data
end
:
new_data = List.insert_at(new_data, -1, data)
new_data
変数は、理解の範囲にローカルです。以前のnew_data
値を使用することはできますが、外部スコープに対して再バインドすることはできません。だからあなたの理解の後にnew_data
がまだ[]
なのはなぜですか。スコープの規則は、http://elixir-lang.readthedocs.org/en/latest/technical/scoping.html
で説明されています。関数型プログラミングでは、一般的に_everything_は式です。 @Gazlerは以下の点を指摘しているので、理解の結果を値に直接割り当てることができるので、「値を空の値に初期化してから割り当てる」必要はありません。 –
ところで、これはErlangの質問ではありません。私はこれからerlangタグを削除します。 –