1

我在一个具有一些 3rd 方依赖项的项目上运行 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'

实际上,此代码与 atom 或 pid 完美配合。除了更新第三方库之外,有没有办法在不分叉代码的情况下覆盖该规范,或者只是忽略该特定错误?

4

1 回答 1

3

可以使用-dialyzer(...)属性来抑制 Dialyzer 警告,如此所述。

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

-dialyzer({no_contracts, function_that_calls_riakc_pb_socket_get}).

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

请记住,虽然您的“标记”调用可能正常工作,但第 3 方库的开发人员可能打算只支持指定合同描述的参数(因此尊重它们可以让您免于麻烦在未来的版本中)。

于 2018-02-12T12:38:11.487 回答