由于Erlang不是真正面向对象的,所以没有真正的单例类,但我想一个注册的进程可以用作一个.
在应用程序内使用已注册的进程以使访问更容易是一种好的做法吗?缺点我看到,例如,您不能在一个节点内运行此类应用程序的多个实例.
以gui应用程序为例,其中包含管理事件的进程以及其他负责声音的进程.将这些2"单身"作为注册过程并将其称为sound:play(file_name)而不是存储pid并进行操作,这是一种好习惯sound:play(Pid, file_name)吗?
在注册名称下使用gen_server来完成此操作是相当常见的.您可以从同一个模块中导出函数,这些函数只是执行gen_server:对相关的命名进程进行调用.
(可以说,Erlang比你可能习惯的更"真实"OO.但这不是这个问题的内容.)