首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ETS在Erlang的声明

ETS在Erlang的声明
EN

Stack Overflow用户
提问于 2009-06-12 18:24:16
回答 2查看 887关注 0票数 1

下面的代码给出了一个错误:“前面的语法错误: Some_ets"

代码语言:javascript
复制
-module(tut).
-export([incr/1]).

Some_ets = ets:new(?MODULE, [bag]).

incr(X) ->
    X+1.

但我可以在一个函数中声明ETS,例如:

代码语言:javascript
复制
-module(tut).
-export([incr/1]).

incr(X) ->
    Some_ets = ets:new(?MODULE, [bag]),
    X+1.

我不能在函数之外声明ETS吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-06-12 22:56:50

不--与其他语言不同,没有静态初始化的概念-- Erlang系统没有适当的时间来执行这段代码。

然而,Erlang确实有参数化模块的概念,这可能就是您所追求的。在这里查看一下http://www.lshift.net/blog/2008/05/18/late-binding-with-erlang,这是一个很好的编写-它将允许您实例化绑定到给定ets表的tut模块的“实例”,并在模块函数调用中显式地传递该句柄。

如果您进入OTP,则可以在state变量中传递ets表的句柄:

代码语言:javascript
复制
init(_) ->
    Some_ets = ets:new(?MODULE, [bag]),
    {ok, Some_ets}.

and then use it in your handle_call methods:

get_ets_handle() ->
    gen_server:call(?MODULE, {getETSHandle}, infinity).

handle_call({getETSHandle}, _From, Some_ets) ->
    {reply, Some_ets, Some_ets}.
票数 9
EN

Stack Overflow用户

发布于 2009-06-12 19:39:20

您不能在模块中执行这样的变量赋值。见这里

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/988222

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档