2016-05-12 3 views
5

私はerlangを学んでいて、透析器を使用して可能な限り最大の型安全性を得ようとしています。私が理解していないことがあります:非終了関数の型は何か、それをどのように指定するかです。あなたはこれに光を当ててください。erlangの終了しない関数のタイプ

答えて

7

永遠にループし、終了しない関数は戻り値の型がno_return()です。 (戻り値の型は、例外を常にスローする関数、たとえばカスタムエラー関数にも使用されます。戻り値の型を指定しないと、関数には「ローカル戻り値がありません」ということが通知されます)。

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 –

関連する問題