【问题标题】:erlang override spec or ignore break contract error with rebar3erlang覆盖规范或忽略rebar3的中断合同错误
【发布时间】:2018-02-12 20:38:11
【问题描述】:

我在一个项目上运行 rebar3,该项目有一些第 3 方依赖项,其中一个项目的定义规范存在问题。当我移到 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 完美配合。除了更新第三方库之外,有没有办法在不分叉代码的情况下覆盖该规范,或者只是忽略该特定错误?

【问题讨论】:

    标签: erlang dialyzer rebar3


    【解决方案1】:

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

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

    -dialyzer({no_contracts, function_that_calls_riakc_pb_socket_get}).
    

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-05
      • 1970-01-01
      • 2022-10-01
      • 2018-12-26
      • 2016-05-07
      • 2020-03-30
      • 2015-04-25
      • 1970-01-01
      相关资源
      最近更新 更多