在Erlang中编写规范的指南

mbs*_*ikh 11 erlang types specs

在开源项目中,我看到以下两种编写规范的方法:

评论中的规范

@spec start_link() -> {ok, pid()}
Run Code Online (Sandbox Code Playgroud)

源代码中的规范

-spec start_link() -> {ok, pid()}
Run Code Online (Sandbox Code Playgroud)

有什么不同?一个比另一个更受欢迎吗?

小智 13

comment(@spec)版本早于源代码(-spec)版本.后者是优选的.

根据EDoc文档:

注意:虽然下面描述的语法仍可用于指定函数,但我们建议将类型和函数规范中描述的Erlang规范添加到源代码中.通过这种方式,可以在保持文档一致和最新的过程中利用Dialyzer的分析.除非还有一个具有相同名称的函数规范(@spec标记后跟一个类型),否则将使用Erlang规范.