Для каждого элемента в filtered_list
вы создаете новый MapSet в области функции обратного вызова.Вы не можете перепривязать map_set
верхней области видимости в функции обратного вызова (хотя вы можете прочитать ее, перепривязка просто создает новую переменную области видимости).Вместо этого вы должны использовать возвращаемое значение выражений.Например,
filtered_list = ["foo", "bar"]
map_set = MapSet.new() # this is actually redundant
map_set = Enum.reduce(filtered_list, map_set, fn filter, map_set ->
MapSet.put(map_set, filter)
end)
Это верно для if
, case
, cond
, ... вы используете возвращаемое значение вашего выражения.
something = "foo"
if true do
something = something <> "bar"
end
# it's still foo
something
, если выхотите перепривязать something
вы должны использовать возвращаемое значение выражения if
something = "foo"
something =
if true do
something <> " bar"
end
# is "foo bar"
something
Кстати, вы можете просто передать filtered_list
в MapSet.new/1
и если вам нужно какое-либо преобразование, вы можете использовать MapSet.new/2