Erlang - 全局变量..是的,我知道,我知道

标签 erlang global

好吧,我一直在尝试各种方法来解决这个问题。

我需要让这个表成为一个全局表。我已经意识到在我的程序范围内传递 TableID 的效率要低得多。

所以我尝试创建一个新表然后查找它:

TableID = ets:new(tb, [set,public]),
put({tableUniqueID}, TableID),

然后我用了:

get({tableUniqueID})

在同一个函数中,它返回 TableID 就好了...但是当我在另一个函数中使用它时,它返回一个未定义的值。

什么?我认为 get 和 put 成为了一个关键的全局..

此外,在这一切之前,我意识到您“可以”这样调用表查找函数:

ets:lookup(get({tableUniqueID}), msgIn)

同样的事情,在函数中有效,在外部则不行.. Get Put 问题..

然后我意识到查找表的另一种方法是调用表的原子

ets:lookup(tb, msgIn)

但这永远不会起作用,在函数内部不起作用,在函数外部也不起作用..

所以我的首要任务是弄清楚为什么不可能通过原子查找表。但它说它无处不在,包括手册。

我可以没有 get/put,只要我可以存储表,然后通过其原子标识符查找表。

有人能解释这个困境吗?

最佳答案

我明白了!!

希望文档能够在查找功能下这样说。 更好的是,每个编写 ets 教程或更详细的书籍的人

解决办法是

TableID = ets:new(tb, [set,public,named_table])

named_table 是重要的部分

一些深入研究手册页,但是

;)

关于Erlang - 全局变量..是的,我知道,我知道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3490520/

相关文章:

iPhone 基于导航的应用程序 - 一些全局工具栏问题

node.js - 如何使用全局/通用node_modules代替本地node_modules?

replace - 在 Sublime Text 2 中全局查找和替换(所有文件和所有目录中)

erlang - 无需 root 权限即可安装 libssl-dev 和 libncurses5-dev

sockets - Erlang套接字和接收超时

erlang - 如何在 Erlang 中创建临时文件名?

python - 引用全局基元与对象

list - 从Erlang中的列表中删除重复的元素

java - 如何在java中实现Erlang的 "Let it crash"概念

c# - 在 C# 中解决全局热键处理的最佳方法?