Estoy escribiendo un pequeño servicio erlang y me gustaría poner restricciones a mis tipos.Cómo usar la funcionalidad -spec en erlang
Encontré la funcionalidad -spec, y me parece que esta es una forma de 'bloquear' las firmas de funciones para tipos específicos.
Mi ejemplo sería una función como:
fib(N) when N < 3 ->
1;
fib(N) ->
fib(N-1) + fib(N-2).
añadiendo la línea
-spec fib_cps(pos_integer()) -> pos_integer().
debe asegurarse de que el método devuelve al menos el tipo correcto, pero esto no parece ser el caso. .
de Si cambio de la función a:
fib(N) when N < 3 ->
ok;
fib(N) ->
not_ok.
el código aún se compila, funciona bien e incluso se ejecuta.
¿Qué es lo que no entiendo?
Por cierto, su especificación de tipo debería parecerse a '-spec fib_cps (pos_integer()) -> pos_integer().' (Tenga en cuenta los paréntesis vacíos), de lo contrario, Dialyzer piensa que quiere decir el átomo 'pos_integer'. – legoscia