我在一个有少量第三方依赖项的项目上运行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完美配合。除了更新第三方库之外,还有什么方法可以在不分支代码的情况下覆盖该规范,或者只是忽略该特定错误?
答案 0 :(得分:3)
可以使用-dialyzer(...)
属性来抑制透析器警告,如文档here所示。
对于您的情况,使警告静音的适当属性可能是:
-dialyzer({no_contracts, function_that_calls_riakc_pb_socket_get}).
(注意:如果没有代码,我实际上无法测试。)
请记住,虽然可能是您的标记"如果调用工作正常,第三方库的开发人员可能只支持指定合同所描述的参数(因此尊重它们可以免除以后版本中的麻烦)。