erlang-将一个数字作为名称参数传递给register/2

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。我认为数

当使用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。我认为数字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术语是一段单独的数据。术语的一些示例如下:

  • 原子
  • 元组(本身包含更多术语)
  • 列表(本身包含更多术语)
  • 二进制文件
  • 函数

或如中所述:“如果原子不是以小写字母开头,或者它包含字母数字字符、下划线(_)或@以外的其他字符,则应将其括在单引号(')中。”。因此,您可以在shell中键入“2”以从整数中创建一个原子。在没有固定的数字列表的情况下执行此操作时要小心,否则会泄漏原子,可能更喜欢列表_而不是现有的_原子,并明确定义您的原子,如中所述:“原子应包含在单引号('))如果它不是以小写字母开头,或者如果它包含除字母数字字符以外的其他字符,则使用下划线(\)或@。“。因此,您可以在shell中键入“2”以从整数中创建一个原子。在没有固定的数字列表的情况下执行此操作时要小心,否则会泄漏原子,可能更喜欢列表_而不是现有的_原子,并显式定义您的原子