我是透析器的新手,我希望有人可以通过回答这个问题来快速了解它的操作。
我认为给定数字X和非负整数N的下列函数会产生一个数字。 (X到N次幂。)
-spec pow(X :: number(), N :: non_neg_integer) -> number().
pow(X, N) ->
pow(X, N, 1).
pow(_X, 0, R) ->
R;
pow(X, N, R) ->
pow(X*X,
N bsr 1,
if
N band 1 =:= 0 ->
R;
true ->
X*R
end).
但透析器不喜欢我的规格。它告诉我:
Invalid type specification for function t:pow/2.
The success typing is (_,integer()) -> any()
在我看来,它是一个过于包容的规范。有人可以解释为什么会这样做,以及是否有任何方法可以接受更严格的类型规范?
答案 0 :(得分:8)
我相信是因为你写了non_neg_integer而不是non_neg_integer()。