elixir不使用enum.each更新映射集中的值 map\u set=MapSet.new Enum.eachfiltered_list,fn x->map_set=MapSet.putMapSet.newmap_set,x

elixir不使用enum.each更新映射集中的值 map\u set=MapSet.new Enum.eachfiltered_list,fn x->map_set=MapSet.putMapSet.newmap_set,x,elixir,Elixir,这里过滤列表是一个包含字符串的列表,但当我打印映射集时,它返回一个空集。为什么?对于过滤列表中的每个项目,您正在回调函数的作用域中创建一个新的映射集。您不能在回调函数中重新绑定上部作用域的map_集,尽管您可以读取它,但重新绑定它只会生成一个新的作用域变量。相反,您应该使用表达式的返回值。比如说 filtered_list = ["foo", "bar"] map_set = MapSet.new() # this is actually redundant map_set

这里过滤列表是一个包含字符串的列表,但当我打印映射集时,它返回一个空集。为什么?

对于过滤列表中的每个项目,您正在回调函数的作用域中创建一个新的映射集。您不能在回调函数中重新绑定上部作用域的map_集,尽管您可以读取它,但重新绑定它只会生成一个新的作用域变量。相反,您应该使用表达式的返回值。比如说

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
顺便说一句,您可以将过滤列表传递给,如果需要任何转换,您可以对过滤列表中的每个项目使用

,您将在回调函数的作用域中创建一个新的映射集。您不能在回调函数中重新绑定上部作用域的map_集,尽管您可以读取它,但重新绑定它只会生成一个新的作用域变量。相反,您应该使用表达式的返回值。比如说

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

顺便说一句,您可以将筛选的_列表传递给,如果您需要任何转换,您可以使用

您的代码与此等效:

map\u set=MapSet.new Enum.eachfiltered_列表,fn x-> 其他=MapSet.putMapSet.newmap\u集,x 终止 指定给枚举内部的映射集是一个局部变量,它与枚举外部的映射集无关。它也可以被称为other,因为您正在丢弃该变量。Elixir是一种不可变语言,因此需要将可枚举的结果分配给map_集

如果您只想将列表转换为集合,只需执行以下操作:

MapSet.newfiltered\u列表
您的代码与此等效:

map\u set=MapSet.new Enum.eachfiltered_列表,fn x-> 其他=MapSet.putMapSet.newmap\u集,x 终止 指定给枚举内部的映射集是一个局部变量,它与枚举外部的映射集无关。它也可以被称为other,因为您正在丢弃该变量。Elixir是一种不可变语言,因此需要将可枚举的结果分配给map_集

如果您只想将列表转换为集合,只需执行以下操作:

MapSet.newfiltered\u列表
Enum.reducefiltered_list,map_set,&MapSet.put&2,&1:@AlekseiMatiushkin有点神秘,但Hellyah:怎么神秘?!根据José的说法,捕获是长生不老药的最佳特性:@AlekseiMatiushkin如果José这么说的话,那么它就是:Enum.reducefiltered_list,map_set,&MapSet.put&2,&1:@AlekseiMatiushkin有点神秘,但是Hellyah:怎么神秘?!根据何塞的说法,捕获是长生不老药的最佳特征:@AlekseiMatiushkin如果何塞说了,那就是:谢谢你,亚当。我没有检查这个地图集。新功能。谢谢,亚当。我没有检查此映射集。新函数。