Mar*_*sen 6 erlang types casting
我正在写一个小的erlang服务,我想对我的类型设置约束.
我找到了-spec功能,在我看来这是一种将函数签名"锁定"到特定类型的方法.
我的例子是:
fib(N) when N < 3 ->
1;
fib(N) ->
fib(N-1) + fib(N-2).
Run Code Online (Sandbox Code Playgroud)
添加线
-spec fib_cps(pos_integer()) -> pos_integer().
Run Code Online (Sandbox Code Playgroud)
应该确保atleast方法返回正确的类型,但似乎并非如此.
如果我将功能更改为:
fib(N) when N < 3 ->
ok;
fib(N) ->
not_ok.
Run Code Online (Sandbox Code Playgroud)
代码仍然编译,很好,甚至运行.
我有什么误会?