是否可以将 Erlang Atom 转换为数值?

Oli*_*son 2 erlang hash

据我所知,Erlang 中的原子作为索引存储在原子表中,即它们本质上是数字。

我想计算包含原子的列表的哈希值,所以理想情况下我想将原子转换为数字进行处理。我知道虚拟机之间的数字可能有所不同,但这与我的用例无关——我只是在寻找一种简单的方法将它们转换为数值。

我想我可以将它们转换回列表或二进制文件(但这些是组成名称的字符列表)并使用这些值来计算哈希值(本质上是原子的名称)。

所以我的问题是:

  1. 是否有可能访问原子的内部(数字)值?
  2. 我是否应该完全不用担心这一点,而是使用该atom_to_list函数,这可能只会稍微慢一些?

leg*_*cia 6

不确定是否有办法访问原子表索引,但如果您想获取 Erlang 术语的哈希值,一种简单的方法是erlang:phash2/1

> erlang:phash2(foo).
27999
Run Code Online (Sandbox Code Playgroud)

哈希值基于原子的名称,因此它与您的atom_to_list想法类似。