erlang 透析器只检查功能的第一种情况

izj3ouym  于 2022-12-08  发布在  Erlang
关注(0)|答案(1)|浏览(146)

为什么透析器只检查功能的第一个用例?

-spec f(integer()) -> integer().
f(0) -> 0;
f(_) -> test.

继续分析...在0m0.25s内完成完成(成功通过)
带有“case”的版本也会通过检查:

-spec f(integer()) -> integer().
f(N) -> 
    case N of
      0 -> 1;
      _ -> test
    end.

透析器版本为4.4.3

e5nszbig

e5nszbig1#

如果通过,因为你已经告诉了它函数应该做什么。如果你试图用规范中的不同参数 * 调用 * 函数,那么你会得到一个警告:
测试()-〉f(不是整数)。
给出透析器输出:

f.erl:8:13: The call f:f    
         ('not_an_integer') breaks the contract.   
          (integer()) -> integer()

相关问题