私は小さなerlangサービスを作成していますので、私のタイプに制約を入れたいと思います。erlangで-spec機能を使用する方法
私は-specの機能を見つけました。これは、これが機能のシグネチャを特定のタイプに「ロックする」方法のようです。
私の例では、関数のようになります:
fib(N) when N < 3 ->
1;
fib(N) ->
fib(N-1) + fib(N-2).
-spec fib_cps(pos_integer()) -> pos_integer().
は、方法は、少なくとも正しい型を返すことを確認する必要があり行を追加しますが、これはそうではないようです。 。
の場合:
fib(N) when N < 3 ->
ok;
fib(N) ->
not_ok.
コードはまだコンパイルされ、うまく実行されます。
私は何を誤解していますか?
ところで、あなたの型指定は '-spec fib_cps(pos_integer()) - > pos_integer()。'(空白のカッコに注意してください)のようになります。そうしないとDialyzerはあなたが 'pos_integer' – legoscia