10

私は、Erlang プログラムのさまざまなタイピング方法を探して Web を探し回っていますが、いくつかあるようです...確かな情報源を見つけるのはやや難しいですが、次のような実用的な情報を探しています。

1. -specs- これはかなり魅力的に見えます。いくつかの場所では、関連する -specs ディレクティブを持つ関数がコンパイル時にチェックされると言及されています(正しい型の使用のために)...使用方法に関する詳細情報を見つけることができないようです(どのツールを使用するか-Dialyzer、タイプ?)。フォームの関数宣言からこれらの「仕様」を生成する小さなパーサー/コード生成を作成することに本当に熱心です

functionName(param1 :List, param2 :Tuple) -> ...

抽象-spec型 (ユーザー宣言型 - "Car" 型 -

{car,{weight,_},{height,_},{maxSpeed,_}}

2.ここに記載されている-deftypeディレクティブ

入力を開始してコンパイル時にチェックできるようになれば、Erlang は私にとって非常に強力になるでしょう。上記のパーサー/コード生成の実行時は、出力ソースコードでガード タイプ チェックを生成します。

4

3 に答える 3

14

type 属性と spec 属性の詳細については、次を参照してください。

http://www.erlang.org/eeps/eep-0008.html

ダイアライザーを使用してそれらをチェックできます( を参照dialyzer --help)。

Typer を使用してそれらを生成できます (「参考文献」を参照typer --help)。

于 2009-02-10T14:15:52.497 に答える
3

http://learnyousomeerlang.com/types-or-lack-thereof (非常 に 明確な説明) と参照をご覧ください: http://erlang.org/doc/reference_manual/typespec.html

于 2011-06-07T11:28:38.573 に答える
1

コンパイル時の型チェックはErlangでは行われません。代わりに、コンパイル後の型チェックを実行するDialyzerを使用してください。

'ユーザー定義型'を作成する方法は、提案したようにタグ付きタプルを使用することです。Dialyzerはコードパスを調べて、失敗する関数リターンを作成する可能性のあるコードパスを特定します。

ダイアライザーが最適に機能するためには、「失敗した場合は許可」を採用し、期待される結果に一致する句のみを記述する必要があります。常に一致する「else」構文とその他のいくつかのベストプラクティスを避けてください。

関数をedocで文書化する必要があります。ダイアライザーは、ドキュメントシステムのタイプ仕様を使用して、タイプを推測します。edocマニュアルはここにあります。

于 2009-02-11T07:33:53.237 に答える