2

私はダイアライザーを初めて使用します。この質問に答えて、誰かがダイアライザーの操作について簡単に理解できることを願っています.

数値 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()

それが示唆しているのは、過度に包括的な仕様のように私には思えます。なぜこれを行うのか、より制限的な型指定を受け入れる方法があるかどうかを誰かが説明できますか?

4

1 に答える 1

8

あなたが non_neg_integer() の代わりに non_neg_integer を書いたからだと思います。

于 2012-09-25T22:07:02.093 に答える