"-spec"在Erlang语法中做了什么?如果使用或不使用-spec创建函数,那么差异是什么?

ele*_*ser 4 erlang

我是erlang编程的新手.我有很多疑问.其中一个是使用-spec.

"-spec"在Erlang语法中做了什么?如果使用或不使用-spec创建函数,有什么区别

没有-spec的函数

add(A, B) ->
    A + B.
Run Code Online (Sandbox Code Playgroud)

使用-spec函数

-spec add(Number, Number).
add(A, B) ->
    A + B.
Run Code Online (Sandbox Code Playgroud)

我在谷歌搜索但无法理解-spec的确切用法.有人可以解释一下吗?

Asi*_*aga 7

spec添加有关代码的信息.它表示函数的arity并与-type声明相结合,有助于文档和错误检测工具.

像Edoc这样的工具使用这些类型规范来构建文档.像Dialyzer这样的工具使用它来进行代码的静态分析.

所以它不是由运行代码直接使用,而是许多工具使用它来更好地"理解"代码.

  • @Shahid,Erlang 被发明为一种“动态类型”语言,这意味着您不必像在 C/C++ 中那样声明变量的类型。有些人不喜欢动态类型语言,比如 C/C++ 程序员,所以有人试图通过在语言中添加 `-spec` 和 `-type` 来使 Erlang 更像一种静态类型语言。如果没有 `-spec` 和 `-type` 会造成额外的混乱,学习 erlang 已经够难了。暂时忘记它们,但为了更清楚地了解它们的用途,请参阅 http://learnyousomeerlang.com/types-or-lack-thereof (2认同)