erlang覆盖规范或忽略与rebar3的中断合同错误

时间:2018-01-29 20:36:07

标签: erlang dialyzer rebar3

我在一个有少量第三方依赖项的项目上运行rebar3,其中一个问题与定义的规范有关。当我转移到rebar3时,弹出一个新错误,显示我的一个方法调用违反了合同:

riakc_pb_socket:get(my_app, Bucket::any(), Key::any(), Options::any(),
  Timeout::any())
breaks the contract
(pid(), bucket() | bucket_and_type(), key(), get_options(), timeout())
  -> {'ok',riakc_obj()} | {'error',term()} | 'unchanged'

实际上,这段代码与原子或pid完美配合。除了更新第三方库之外,还有什么方法可以在不分支代码的情况下覆盖该规范,或者只是忽略该特定错误?

1 个答案:

答案 0 :(得分:3)

可以使用-dialyzer(...)属性来抑制透析器警告,如文档here所示。

对于您的情况,使警告静音的适当属性可能是:

-dialyzer({no_contracts, function_that_calls_riakc_pb_socket_get}).

(注意:如果没有代码,我实际上无法测试。)

请记住,虽然可能是您的标记"如果调用工作正常,第三方库的开发人员可能只支持指定合同所描述的参数(因此尊重它们可以免除以后版本中的麻烦)。