gen_server:start/4 中“Function”的类型签名是什么?

what is the type signature of `Func` in gen_server:start/4?

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?文档只是说:

This function is useful when a more complex initialization procedure is needed than the gen_server process behavior provides.

所以现在我知道它很有用了。但是它需要多少参数呢?属于什么类型?

感谢您的帮助。

该规范中的 Funcdebug 的选项,因此与该文档关系不大。

您引用的文档指的是 gen_server:enter_loop 函数,而不是 Func.

关于您的问题,Funcsys 模块处理,如 sys:install/2, and has the following spec:

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

如果我关注最新母版上的源代码,gen_server 的文件没有提及任何 debug 选项中的 install

所以我猜

  1. 代码已更改,文档不是最新的
  2. 代码和文档已更改但未部署最新文档

从历史上看,这可能就是“@Jose M”所指的。