为什么透析器发现我的型号规格无效



我是透析器的新手,我希望有人可以通过回答这个问题来快速了解透析器的操作。

我认为下面的函数,给定一个数字 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()

在我看来,它所暗示的是一个过于包容的规范。有人可以解释为什么这样做,以及是否有任何方法可以接受更严格的类型规范?

我相信这是因为

你写了non_neg_integer而不是non_neg_integer()。

相关内容

  • 没有找到相关文章

最新更新