【发布时间】:2014-09-11 05:35:00
【问题描述】:
查看documentation for one of the new R17 features,maps,将我带到 maps:remove/2 和 maps:without/2。我能看到的唯一明显区别是 remove/2 采用单个键并返回没有它的地图视图,其中 without/2 接受列表并返回缺少列出的键的全新地图。
22> M1 = #{foo => bar, spam => eggs}.
#{foo => bar,spam => eggs}
23> M2 = maps:without([foo], M1).
#{spam => eggs}
24> M3 = maps:remove(foo, M1).
#{spam => eggs}
25> M1.
#{foo => bar,spam => eggs}
26> M2.
#{spam => eggs}
27> M3.
#{spam => eggs}
这有什么实际影响?我可以理解不想使用 without/2 创建巨大地图的内存副本,但为什么 remove/2 不接受列表?我假设这两个函数以它们的方式存在是有一个面向性能的原因,但是我很困惑什么时候我想在大多数情况下使用一个而不是另一个(意思是,我不认为维护巨大的地图通常是一个好主意)。
【问题讨论】:
标签: erlang