相关疑难解决方法(0)

Elixir变量真的是不可变的吗?

在Dave Thomas的书"编程Elixir"中,他指出"Elixir强制执行不可变数据"并继续说:

在Elixir中,一旦变量引用了诸如[1,2,3]之类的列表,您就会知道它将始终引用那些相同的值(直到您重新绑定变量).

这听起来像"除非你改变它,否则它不会改变"所以我对可变性和重新绑定之间的区别感到困惑.突出差异的一个例子非常有用.

immutability elixir

68
推荐指数
4
解决办法
9957
查看次数

如何在Elixir/Erlang中通过指针相等来比较两个结构

(在Elixir中给出的例子.)

假设我有以下代码,

x = {1, 2}
a1 = {"a", {1, 2}}
a2 = {"a", {1, 2}}
a3 = {"a", x}
Run Code Online (Sandbox Code Playgroud)

据我所知,{1, 2}在不同的内存位置创建了三个元组.

使用运算符=====比较任何a变量总是返回true.这是可以预料的,因为这两个运算符仅在比较数字类型时有所不同(即,与之1 == 1.0不同1 === 1.0).

所以,然后我尝试通过模式匹配比较结构,使用以下模块(严格创建以测试我的情况),

defmodule Test do
  def same?({x, y}, {x, y}), do: true
  def same?(_, _), do: false
end
Run Code Online (Sandbox Code Playgroud)

但是召唤Test.same?(a1, a3)也会回来true.

如何使用指针相等性比较两个结构,以便我可以确定它们在内存中是否是相同的结构?

谢谢

erlang elixir

5
推荐指数
3
解决办法
357
查看次数

Erlang地图之间的实际区别:删除/ 2和地图:没有/ 2

检查一个新的R17功能,地图的文档,带我到地图:删除/ 2和地图:没有/ 2.我能看到的唯一明显区别是remove/2只接受一个键并返回一个没有它的地图视图,其中没有/ 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}
Run Code Online (Sandbox Code Playgroud)

这有什么实际影响?我可以欣赏不想创建没有/ 2的巨型地图的内存副本,但为什么不删除/ 2接受列表?我假设存在一个以性能为导向的原因,为什么这两个函数以它们的方式存在,但是我很困惑何时我想在大多数情况下使用一个而不是另一个(意思是,我不认为维护巨大的地图通常是个好主意).

erlang

2
推荐指数
1
解决办法
308
查看次数

标签 统计

elixir ×2

erlang ×2

immutability ×1