4
如果您有PID,是否有办法获得注册名?erlang:与name_for_pid()类似吗?
如果您有PID,是否有办法获得注册名?erlang:与name_for_pid()类似吗?
我假设你要这样对某种调试/反省而不是为了在你的代码一般使用:
erlang:process_info(Pid, registered_name).
给你[]
如果过程没有本地注册的名称,如果有的话,还有{registered_name, Name}
。
您也可以使用:proplists:get_value(registered_name,erlang:process_info(Pid))。直接返回名称或未定义原子。尽管如此。 – 2010-10-20 08:33:25
目的:我有一个gen_server作为一组进程的主要行为。但是,每个流程都需要有一些补充行为,我通过一种“回调”模块提供。当主管启动时,它会创建主gen_server的多个副本,并以不同的名称注册每个副本。这些不同的名称也将是回调模块的名称。我也可以传入回调模块作为参数,但为什么打扰它是否已经可用。还是有一个更清洁的想法? – mwt 2010-10-20 16:05:29
通过阅读进程本身的注册名来传递信息将会让习惯于更典型的erlang代码的人感到非常困惑 - 如果您希望获得该信息,请将其明确传递并存储在#state {}记录中。你可以使用各种狡猾的机制来传递信息(过程字典,参数化模块等),但是我建议不要这样做,因为它会使代码难以遵循。 Erlang能够通过查看它的代码和它给出的参数来计算函数的效果是很好的。 – archaelus 2010-10-25 05:59:57