Sto scrivendo un piccolo servizio di erlang e vorrei mettere dei vincoli sui miei tipi.Come utilizzare la funzionalità -spec in erlang
Ho trovato la funzionalità -spec e mi sembra che questo sia un modo per "bloccare" le firme delle funzioni su tipi specifici.
mio esempio potrebbe essere una funzione come:
fib(N) when N < 3 ->
1;
fib(N) ->
fib(N-1) + fib(N-2).
aggiungendo la riga
-spec fib_cps(pos_integer()) -> pos_integer().
dovrebbe assicurarsi che il metodo restituisce atleast il tipo corretto, ma questo non sembra essere il caso. .
per Se cambio la funzione di:
fib(N) when N < 3 ->
ok;
fib(N) ->
not_ok.
il codice è ancora compilato, funziona bene e anche.
Cosa sto fraintendendo?
BTW, la tua specifica di tipo dovrebbe apparire come '-spec fib_cps (pos_integer()) -> pos_integer().' (Nota le parentesi vuote), altrimenti Dialyzer pensa che tu intenda l'atomo 'pos_integer'. – legoscia