【问题标题】:Dialyzer check only the first case of the function透析器只检查函数的第一种情况
【发布时间】:2022-08-04 23:56:43
【问题描述】:

我可以在这里问一个新手问题:
为什么 Dialyzer 只检查函数的第一种情况?

-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

  • 虽然这个例子是在 Elixir 而不是 Erlang 中,但这个 issue 非常相似。使用 missing_return 标志应该可以捕捉到这一点。

标签: erlang dialyzer


【解决方案1】:

如果通过,因为您刚刚告诉它该函数应该做什么。如果你尝试称呼具有与规范不同的参数的函数,那么您会收到警告:

测试()-> f(not_an_integer)。

给出透析器输出:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-16
    相关资源
    最近更新 更多