map_set = MapSet.new()
Enum.each(filtered_list, fn x -> map_set = MapSet.put(MapSet.new(map_set),x)
这里的filtered_list是一个包含字符串的列表,但是当我打印map_set时它返回一个空集。为什么?
对于中的每个项目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
to MapSet.new/1如果您需要任何转换,您可以使用MapSet.new/2
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)