Как использовать функциональность -spec в erlang

Я пишу небольшую службу erlang и хочу наложить ограничения на свои типы.

Я обнаружил функциональность -spec , и мне кажется, что это способ «привязать» сигнатуры функций к определенным типам.

Моим примером может быть такая функция, как:

fib(N) when N < 3 ->
    1;
fib(N) ->
    fib(N-1) + fib(N-2).

добавление строки

-spec fib_cps(pos_integer()) -> pos_integer().

должно гарантировать, что метод, по крайней мере, возвращает правильный тип, но, похоже, это не так ..

для Если я изменю function to:

fib(N) when N < 3 ->
    ok;
fib(N) ->
    not_ok.

код по-прежнему компилируется, исправно и даже выполняется.

Что я неправильно понимаю?

6
задан Martin Kristiansen 16 December 2011 в 14:29
поделиться