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
相关产品推荐
相关产品推荐

