好吧,我一直在尝试各种方法来解决这个问题。
我需要让这个表成为一个全局表。我已经意识到在我的程序范围内传递 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/