erlang中的非终止函数的类型

问题描述:

我正在学习erlang并尝试使用透析器在可能时获得最大的类型安全性。有一件事我不明白:什么是非终止函数的类型以及如何在spec中表示它。你能否介绍一下这个问题?erlang中的非终止函数的类型

永久循环且永不终止的函数具有返回类型no_return()。 (该返回类型也用于总是抛出异常的函数,例如自定义错误函数,如果不指定返回类型,则Dialyzer会告诉您该函数“没有本地返回”。)

This在Erlang参考手册的Types and Function Specifications一章中提到:

Erlang中的一些函数并不意味着返回;要么是因为他们定义服务器或者是因为它们被用来抛出异常,如下面的功能:

my_error(Err) -> erlang:throw({error, Err}). 

对于这样的功能,建议使用特殊no_return()类型为他们的“回报”,通过合同如下表格:

-spec my_error(term()) -> no_return(). 
+0

谢谢!我不认为这也可以适用于非终止函数! – ppopoff

+1

这篇博客文章描述了Dialyzer中'no_return()'和'none()'类型之间的(无意)区别:http://joedevivo.com/2015/06/14/no-local-return.html –