You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Elixir 1.6.3中:ets.new/2返回值为何与文档示例不一致?

关于Elixir中:ets.new/2返回整数还是引用的疑惑

哦,这个问题我之前刚碰到过!其实本质是Erlang/OTP版本差异导致的,完全不是你的代码有问题~

为什么文档示例是整数,你得到的是引用?

在Erlang/OTP 21之前,ETS表的标识符是整数类型;而从OTP 21开始,官方把ETS表ID改成了#Reference<...>这种引用类型——这么做是为了避免整数ID可能的冲突,同时让VM能更安全地管理表的生命周期。

你看到的文档示例应该是基于旧版OTP写的,而你的Elixir 1.6.3环境搭配的是OTP 21+版本,所以调用:ets.new/2会返回引用,这是完全正常的。

两种返回值有影响吗?

完全没有!不管是整数还是引用,都是有效的ETS表标识符,你可以用它正常调用所有:ets模块的函数:

# 用返回的引用操作表,完全没问题
table = :ets.new(:buckets_registry, [:set, :protected])
:ets.insert(table, {:username, "alice"})
:ets.lookup(table, :username) # 会返回 [{:username, "alice"}]

功能上没有任何区别,放心用就行。

总结

不用纠结返回值是整数还是引用,这只是不同OTP版本的表现差异,只要能正常操作ETS表就说明一切正常~

内容的提问来源于stack exchange,提问作者Right leg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:15:40