2016-08-09 3 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) 

오류 : 당신은 당신이보고있는 source.key1 = ...

오류와지도를 업데이트 할 수 없습니다

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

source.key1 = aa # error is here 

답변

1

을 확인해야합니다 당신은 atom의를 적용 할 수 없습니다

"B"를 얻을은 "" my_map [ "B"] GET을 위해 : [A] my_map의 key가 아닌 yntax. 원자가 아니다.

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 

Map.update!/3있다,하지만 키가 맵에없는 경우는 KeyError을 올릴 것이다 :

는 두 가지 기능을 사용해야하는 맵을 업데이트합니다.

1

결과입니다 : 어느 쪽이

cannot invoke remote function source.key1/0 inside match 

패턴 매칭 중에 함수를 호출하려고합니다. key1가 이미 맵에 존재하지 않는 경우

%{source | key1: aa} 

이가 인상됩니다

당신이 할 수 있습니다지도를 업데이트하려면.

또는 : key1가 이미 맵에 존재하지 않는 경우

Map.put(source, :key1, aa) 

이 인상되지 않습니다.


는 또한 Enum.each의 결과가 그래서이 :okkey1를 설정합니다 원자 :ok 있음을 알아 두셔야합니다.

아마 Enum.map/2을 원하십니까? GET에 대한

my_map.a "는"

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

당신은에 액세스 할 수 있습니다 :이처럼 보이는지도가있는 경우

또한 update_in/3

관련 문제