gpt4 book ai didi

erlang - 如何通过 Elixir/Erlang 中的指针相等比较两个结构

转载 作者:行者123 更新时间:2023-12-04 13:02:36 24 4
gpt4 key购买 nike

(Elixir 中给出的示例。)

假设我有以下代码,

x = {1, 2}
a1 = {"a", {1, 2}}
a2 = {"a", {1, 2}}
a3 = {"a", x}

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

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

所以,我然后尝试通过模式匹配比较结构,使用以下模块(严格创建以测试我的案例),
defmodule Test do
def same?({x, y}, {x, y}), do: true
def same?(_, _), do: false
end

但调用 Test.same?(a1, a3)也返回 true .

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

谢谢

最佳答案

Erlang/OTP 22(可能更早)提供 :erts_debug.same/2 ,这将允许您进行所需的内存指针测试。但是,请注意该函数未记录在一个名为 erts_debug 的模块中。 ,所以你应该只依赖它进行调试和测试,而不是在生产代码中。

在我使用 Erlang/Elixir 将近 9 年的时间里,我只使用过一次,这是为了测试我们没有在 Ecto 中不必要地分配结构。这里是 the commit for reference .

关于erlang - 如何通过 Elixir/Erlang 中的指针相等比较两个结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52258516/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com