2015-11-20 5 views
5

なぜこの簡単なfor-loopでリストに記入できないのですか?forループを使ってリストを記入する

new_data = [] 
for data <- old_data do 
    new_data = List.insert_at(new_data, -1, data) 
end 

この操作の後、私のnew_dataリストは、ループが実行N倍であるにも関わらず、空のままです。

+1

で説明されています。関数型プログラミングでは、一般的に_everything_は式です。 @Gazlerは以下の点を指摘しているので、理解の結果を値に直接割り当てることができるので、「値を空の値に初期化してから割り当てる」必要はありません。 –

+0

ところで、これはErlangの質問ではありません。私はこれからerlangタグを削除します。 –

答えて

16

エリクサーでは、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

+0

これは興味深いです。ありがとうございました。私は変数が変更できないことを知っていた。しかし私はリストを宣言すれば、それを再バインドすることができると思った。 – 0xAffe

+0

ありがとう!これは私を理解するには時間がかかりすぎた。 – SMASH

関連する問題