erlang 在gen_server:start/4中'Func'的类型签名是什么?

pvabu6sv  于 2022-12-08  发布在  Erlang
关注(0)|答案(2)|浏览(181)

OTP文档指出gen_server:start/4的签名如下:

start_link(ServerName, Module, Args, Options) -> Result
ServerName = {local,Name} | {global,GlobalName}
  | {via,Module,ViaName}
 Name = atom()
 GlobalName = ViaName = term()
Module = atom()
Args = term()
Options = [Option]
 Option = {debug,Dbgs} | {timeout,Time} | {hibernate_after,HibernateAfterTimeout} | {spawn_opt,SOpts}
  Dbgs = [Dbg]
   Dbg = trace | log | statistics | {log_to_file,FileName} | {install,{Func,FuncState}}
  SOpts = [term()]
Result = {ok,Pid} | ignore | {error,Error}
 Pid = pid()
 Error = {already_started,Pid} | term()

https://erlang.org/doc/man/gen_server.html#start_link-4
什么是Func?文件只是说:
当需要比gen_server进程行为提供得初始化过程更复杂得初始化过程时,此函数非常有用.
所以现在我知道它是有用的。但是它需要多少个参数?什么类型的?
谢谢你的帮助。

sqyvllje

sqyvllje1#

该规范中的Funcdebug的一个选项,因此它与该文档没有什么关系。
您引用的文档引用的是gen_server:enter_loop函数,而不是Func
关于您的问题,Func是用sys模块处理的,就像在sys:install/2中一样,并且具有以下规范:

dbg_fun() =
    fun((FuncState :: term(),
         Event :: system_event(),
         ProcState :: term()) ->
            done | (NewFuncState :: term()))
cgh8pdjw

cgh8pdjw2#

如果我在最新的主服务器上跟踪源代码,gen_server的文件没有提到install作为任何debug选项。
所以我猜
1.代码已更改,文档不是最新的
1.代码和文档已更改,但未部署最新的文档
从历史上看,这可能是“@何塞M”所指的。

相关问题