functional-programming - 在 try/with 块中打印一条消息,在 Ocaml 中没有返回值
问题描述
我正在为 OCaml 中的基本教学解释器编写一个测试单元,所以我有返回有效表达值 (evT) 的测试和简单失败的测试,并“抛出”一个 failwith(“something”) 语句。
如果我编译并运行该文件,显然在第一次失败时程序终止。所以我使用 try/with 块来防止这种情况发生并继续测试过程。我只想打印错误消息而不返回任何值,但它继续说期望一个表达值而不是一个单位。
这是我的代码片段:
try
eval (Dict([("",Eint(30));("mele",Eint(40))])) myEnv
with
Failure(msg) -> Printf.printf "%s" msg
;;
这是输出:
404 | Failure(msg) -> Printf.printf "%s" msg
^^^^^^^^^^^^^^^^^^^^^^
Error: This expression has type unit but an expression was expected of type
evT
解决方案
如果您不需要返回的值,eval
则可以忽略它:
let _ : evT = eval (Dict([("",Eint(30));("mele",Eint(40))])) myEnv in ()
但是,您真正测试的是什么?只是它不扔?你不应该也检查结果是否正确吗?
或者,如果您确实需要try
块外的值,那么在捕获异常的情况下您也需要一个值,这就是错误消息本质上告诉您的内容。唯一的其他选择是中止程序,我知道你不想要。
推荐阅读
- c - gcc 的 -Wc90-c99-compat 标志是如何工作的?
- jquery - jQuery AJAX 响应拆分
- mysql - Phpmyadmin 导出问题:count():参数必须是数组或实现 Countable 的对象
- html - 父 div 使用剪辑路径剪切子 div
- android - 更改适配器中未指定数量的对象的适配器中外部对象的属性
- javascript - 使用或不使用 jQuery 在屏幕上获取浮动 div 位置
- android - 应用程序在 Playstore 上传时停止工作
- python - Django通过多个过滤器过滤,检查某些条件
- python - python保存只有非零元素的numpy数组
- sql - 没有硬编码的情况下的重复模式 (Netezza SQL)