2016-08-28 5 views
2

私は文字列のリストを受け取り、単語リストのリストを生成するメソッドを持っています。`Enum.each`ループでリストを累積します

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

このメソッドは、常に空のリストを返すので、期待どおりに機能しません。

これは、可変シャドーイングのためだと思います。

このコードを動作させるには、どのようなコードを書き直す必要がありますか?

答えて

3

エリキシルの変数は不変なので、ループ内からリストを変更することはできません。変数を変更することができますが、同じスコープ内でしか表示されないため、変数が変更可能な場合があります。

目的の結果を得るには、Enum.flat_map/2を次のように使用します。

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

'flat_map'はトリックを行いました。すばらしいです! – ProGM