Erlang 二郎:为什么可以';我不能注册self()吗?

Erlang 二郎:为什么可以';我不能注册self()吗?,erlang,Erlang,此行失败,出现badarg异常: register(myproc, self()), 文档中说,self/0返回一个pid,register/2接受一个pid。那么是什么原因呢 编辑:不,说真的,它还没有注册,它不是一个保留的原子,当我从生成它的进程中注册它时,它就工作了 哦,奇怪!好吧,我还有一些线索。当我将对register()的调用移动到不同的位置时,它有时工作,有时中断。这是我的示例代码。在你叫我疯子之前,先运行它。:-) myproc已经注册了吗 第一次调用应成功,其他调用将导致ba

此行失败,出现
badarg
异常:

register(myproc, self()),
文档中说,
self/0
返回一个pid,
register/2
接受一个pid。那么是什么原因呢

编辑:不,说真的,它还没有注册,它不是一个保留的原子,当我从生成它的进程中注册它时,它就工作了

哦,奇怪!好吧,我还有一些线索。当我将对
register()
的调用移动到不同的位置时,它有时工作,有时中断。这是我的示例代码。在你叫我疯子之前,先运行它。:-)


myproc已经注册了吗

第一次调用应成功,其他调用将导致badarg异常

1> register(myproc, self()).
true
2> myproc ! foo.
foo
3> flush().
Shell got foo
ok
4> register(myproc, self()).
** exception error: bad argument
     in function  register/2
        called as register(myproc,<0.30.0>)
1>寄存器(myproc,self())。
真的
2> myproc!福。
福
3> 刷新()。
Shell得到了foo
好啊
4> 寄存器(myproc,self())。
**异常错误:参数错误
在功能寄存器/2中
称为寄存器(myproc,)

myproc是否已注册

第一次调用应成功,其他调用将导致badarg异常

1> register(myproc, self()).
true
2> myproc ! foo.
foo
3> flush().
Shell got foo
ok
4> register(myproc, self()).
** exception error: bad argument
     in function  register/2
        called as register(myproc,<0.30.0>)
1>寄存器(myproc,self())。
真的
2> myproc!福。
福
3> 刷新()。
Shell得到了foo
好啊
4> 寄存器(myproc,self())。
**异常错误:参数错误
在功能寄存器/2中
称为寄存器(myproc,)

如果进程已注册,它将抛出badarg。还有其他一些情况会导致这种情况,例如名称已经被使用。更多信息,请参阅

编辑

您发布代码来重现您的问题,这很好

因此,第一次输入
pongr/0
时,您将注册
self()
。当您收到消息时,您将对其进行处理并再次调用
pongr/0
。第二次输入
pongr/0
时,您尝试注册
self()
,该操作失败,因为它已注册


另外,如果您想使用register来注册大量的进程,您应该仔细研究
register/2
需要一个原子作为密钥,并且有大约一百万个原子的限制,除非您明确更改它。看
gproc
也可以分布式运行,因此可以代替
global
模块使用。

如果进程已经注册,它将抛出一个badarg。还有其他一些情况会导致这种情况,例如名称已经被使用。更多信息,请参阅

编辑

您发布代码来重现您的问题,这很好

因此,第一次输入
pongr/0
时,您将注册
self()
。当您收到消息时,您将对其进行处理并再次调用
pongr/0
。第二次输入
pongr/0
时,您尝试注册
self()
,该操作失败,因为它已注册


另外,如果您想使用register来注册大量的进程,您应该仔细研究
register/2
需要一个原子作为密钥,并且有大约一百万个原子的限制,除非您明确更改它。看
gproc
也可以分布式运行,因此可以用来代替
global
模块。

对不起,我不是有意冒犯您。请参阅我编辑的答案,以了解代码中问题的解释。哦,哦,哦!!!我几乎感到尴尬,因为我以前没有看到它。另外,谢谢你的奖金提示和效率链接。对不起,我不是有意冒犯你的。请参阅我编辑的答案,以了解代码中问题的解释。哦,哦,哦!!!我几乎感到尴尬,因为我以前没有看到它。另外,感谢您的奖金提示和效率链接。