自定义行为中的可选回调

Version >= 18.0

默认情况下,行为模块中 -callback 指令中指定的任何函数都必须由实现该行为的模块导出。否则,你将收到编译器警告。

有时,你希望回调函数是可选的:如果存在和导出,行为将使用它,否则将回退到默认实现。为此,像往常一样编写 -callback 指令,然后在 -optional_callbacks 指令中列出回调函数:

-callback bar() -> ok.
-optional_callbacks([bar/0]).

如果模块导出 bar/0,Dialyzer 仍将检查类型规范,但如果该函数不存在,则不会收到编译器警告。

在 Erlang / OTP 本身中,这是针对 gen_servergen_fsmgen_event 行为中的 format_status 回调函数完成的。