2016-08-09 4 views
2

構造体の別のリストにネストされたキーを持つ構造体があり、そのネストしたキー値を新しい値で更新したいとします。ハッシュの値を更新できません

source = get_data 

# source.key1 is an array of structs 

source.key1 = Enum.each(source.key1, fn(x) -> # error is here at "=" 
    # ... 
end) 

エラーは次のとおりです。

cannot invoke remote function source.key1/0 inside match 

どちらもこの:

aa = Enum.each(source.key1, fn(x) -> 
    # ... 
end) 

source.key1 = aa # error is here 

答えて

1

をチェックアウトする必要があります。get "A" のために

my_map.a:

my_map = %{a: "a", "b" => b} 

をあなたがしてそれにアクセスすることができます my_map [:a] get "a" my_map ["b"] get "b"

​​を適用することはできません。キーのyntax。これはアトムではありません。そこMap.update!/3もだが、キーがマップにない場合、それはKeyErrorが発生します

Map.put(my_map, "new_key", "new_value") 
or 
Map.update(my_map, "new_key", "init value", fn for add values) # handy in recursion loop 

:あなたは2つの機能を使用する必要があるマップを更新するには

1

あなたが見ている結果としてエラーがあるsource.key1 = ...

でマップを更新することはできませんパターンマッチング中に関数を呼び出そうとしています。 key1がすでにマップに存在しない場合、これが発生します

%{source | key1: aa} 

:あなたがいずれかを実行することができますマップを更新するには

または:

Map.put(source, :key1, aa) 

key1がすでにマップに存在しない場合、これは発生しません。


またEnum.eachの結果はので、これは:okkey1を設定します原子:okであることに注意してください。

おそらくEnum.map/2が必要ですか?

また、あなたはこのようになりますマップ、持っている場合update_in/3

関連する問題