我一直在网上寻找Erlang程序的各种打字实践,似乎有一些......虽然有点难以找到可靠的信息来源 即我正在寻找有关实用信息:
1。-specs
- 这个看起来很有吸引力。一些地方提到在编译时检查具有相关的-specs指令的函数(为了正确的类型用法)...我似乎无法找到更多关于如何使用它的信息(使用哪种工具 - Dialyzer, TYPER?)。我真的很想创建一个小的解析器/代码生成器,从表单的函数声明生成这些“规范”
functionName(param1 :List, param2 :Tuple) -> ...
我还没有看到-spec
是否支持抽象类型(用户声明的类型 - “Car”类型 -
{car,{weight,_},{height,_},{maxSpeed,_}}
2. -deftype
指令mentioned here
答案 0 :(得分:14)
此处有关类型和规范属性的更多信息:
http://www.erlang.org/eeps/eep-0008.html
透析器可用于检查它们(参见dialyzer --help
)。
Typer可用于生成它们(请参阅typer --help
)。
答案 1 :(得分:3)
看一看 http://learnyousomeerlang.com/types-or-lack-thereof (非常干净的解释)和这里的参考: http://erlang.org/doc/reference_manual/typespec.html
答案 2 :(得分:1)
编译时间类型检查不是Erlang做的事情。而是使用执行编译后类型检查的Dialyzer。
您创建“用户定义类型”的方式是使用您建议的标记元组。透析器将检查代码路径,以识别MIGHT最终创建失败的函数返回的代码路径。
为了使透析器发挥最佳效果,你必须拥抱'let if failed'并且只写出符合预期结果的条款 - 避开总是匹配的'else'结构和其他一些最佳实践。
您应该使用edoc记录您的功能。透析器使用文档系统的类型规范来为您推断类型。可以找到edoc手册here。