ocaml - 为什么我会收到带有类型注释但不是没有的“未使用匹配案例”警告?
问题描述
我发现了有关此警告的另一个问题,但在我的情况下,答案没有意义。
我有这段代码:
let someFun (arg: string) : unit Lwt.t =
try%lwt
do_something arg in
Lwt.return ()
with (error: exn) ->
Format.printf "Error with '%s': %s" arg (Printexc.to_string error);
Lwt.return ()
我收到此错误:
警告 11:未使用此匹配案例。
如果我删除 上的exn
类型注释error
,我的代码将在没有警告的情况下编译。是什么赋予了?
解决方案
这只是 lwt 的 ppx 中的一个缺陷,它无法检测(error:exn)
为一个包罗万象的案例。要了解注释的问题,您需要知道try...with
案例已翻译为:
function
| (error : exn) ->
Format.printf "Error with '%s': %s" arg (Printexc.to_string error);
Lwt.return ()
| exn -> Lwt.fail exn
在这里,第二种情况是多余的,是由 ppx 自己添加的。如果没有类型注释,lwt_ppx
它足够聪明地检测到这种情况是不必要的,因此只会生成:
function
| error ->
Format.printf "Error with '%s': %s" arg (Printexc.to_string error);
Lwt.return ()
编辑:这个问题应该在下一个版本中修复ppx_lwt
:ppx:recognize constrained catch-all case #640
推荐阅读
- android - Playstore 警告:App Bundle 包含本机代码,可以对其进行反混淆并且您尚未上传任何调试符号
- javascript - 单击到可用单元格时如何使 td 标签移动?
- r - 更改堆积条形图中条形图的顺序
- javascript - 更改 HTML 页面语言
- c++ - 如何使用 QNetworkAccessManager 作为 QT DLL 函数下载文件?
- vba - 尝试设置 .SendUsingAccount 时生成错误 91
- reactjs - 如何使用 jest.mock 模拟 useRef 和反应测试库
- python - 在 plotly-dash 中的 URL 之间共享数据
- google-apps-script - 从谷歌编辑器插件更新文档版本名称
- android - 完成后意图再次开始