erlang-将一个数字作为名称参数传递给register/2
当使用register/2时,当我尝试传递一个数字作为进程名参数时,会出现一个错误。在这里,我尝试将shell进程命名为“1”,并得到以下错误:erlang-将一个数字作为名称参数传递给register/2,erlang,Erlang,当使用register/2时,当我尝试传递一个数字作为进程名参数时,会出现一个错误。在这里,我尝试将shell进程命名为“1”,并得到以下错误: 43> register(1,self()). ** exception error: bad argument in function register/2 called as register(1,<0.93.0>) 文档中说register(Name,PID)中的Name参数必须是atom。我认为数
43> register(1,self()).
** exception error: bad argument
in function register/2
called as register(1,<0.93.0>)
文档中说register(Name,PID)中的Name参数必须是atom。我认为数字1实际上是一个原子
我的问题是:如何将一个数字成功地传递到寄存器/2,例如,传递绑定变量p=1成功?原子是一个符号,与整数无关。没有从整数到原子的直接转换,但可以使用中间列表:
1> Int_to_atom = fun(X) -> list_to_atom(integer_to_list(X)) end.
#Fun<erl_eval.6.106461118>
2> Int_to_atom(2).
'2'
3> P = 1.
1
4> Int_to_atom(P).
'1'
5>
1>Int-to-atom=fun(X)->list-to-atom(integer-to-list(X))结束。
#乐趣
2> Int-to-u原子(2)。
'2'
3> P=1。
1.
4> Int-to-u原子(P)。
'1'
5>
原子是一个符号,与整数无关。没有从整数到原子的直接转换,但可以使用中间列表:
1> Int_to_atom = fun(X) -> list_to_atom(integer_to_list(X)) end.
#Fun<erl_eval.6.106461118>
2> Int_to_atom(2).
'2'
3> P = 1.
1
4> Int_to_atom(P).
'1'
5>
1>Int-to-atom=fun(X)->list-to-atom(integer-to-list(X))结束。
#乐趣
2> Int-to-u原子(2)。
'2'
3> P=1。
1.
4> Int-to-u原子(P)。
'1'
5>
来自:
原子是一个文字,一个带名称的常量。原子应该是封闭的
如果不是以小写字母开头或
如果包含字母数字字符以外的其他字符,
下划线(\)或@
你能行
register('1',self()).
(注意单引号,使它成为一个原子而不是一个数字。你可以通过尝试看到它不是一个数字而是一个原子。)
'1' + 1
当您希望“术语”可以互换时,您可能想到了“术语”。Erlang术语是一段单独的数据。术语的一些示例如下:
- 原子
- 数
- 元组(本身包含更多术语)
- 列表(本身包含更多术语)
- 二进制文件
- 函数
register('1',self()).
(注意单引号,使它成为一个原子而不是一个数字。你可以通过尝试看到它不是一个数字而是一个原子。)
'1' + 1
当您希望“术语”可以互换时,您可能想到了“术语”。Erlang术语是一段单独的数据。术语的一些示例如下:
- 原子
- 数
- 元组(本身包含更多术语)
- 列表(本身包含更多术语)
- 二进制文件
- 函数