在 OCaml 中的 let 命令(即 let _ = ... in)中使用下划线通配符有副作用吗?

2024-02-25

使用 OCaml 时,我几乎总是使用下划线通配符let _ = exp,特别是当结果exp并不重要,重要的是里面的计算。例如:



let _ = print_endline "abc" in
...
let _ = a := !a + 1 in
...
let _ = do_some_thing ... in
  

所以,我只是想知道广泛使用是否有任何副作用let _ = ... ?


副作用是将来您的软件中会出现烦人的错误。问题在于let _ =是它会默默地忽略您想要全部的部分应用程序。假设您编写以下内容:

let f a b = ...
let _ = f 3 4

将来你添加一个参数f:

let f a b c = ...

表达方式let _ = f 3 4仍然会静默编译,并且您的程序不会调用该函数,让您想知道发生了什么。最好总是让()并使用ignore当您需要忽略非单位结果时:

let () = ignore (f 3 4)
let () = print_endline "abc"

Using let _ = ...应该算是不好的风格。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 OCaml 中的 let 命令(即 let _ = ... in)中使用下划线通配符有副作用吗? 的相关文章

  • 使用第一类模块时,类型构造函数“...”将转义其范围

    给定一个简单的工厂 module type Factory sig type t val create unit gt t end module FactoryImpl Factory struct type t string let cr
  • 扁平列表和免费 monad

    我试图说服自己 List monad 具有平面列表 列表串联和按元素映射的列表 不是一个自由 monad 准确地说 是与某个函子 T 关联的自由 monad 据我了解 我应该能够通过以下方式实现这一目标 首先在 monad 列表中找到常用运
  • OCaml 是否复制了自定义块?

    想象一下 我有一个名为 libcat 的 C 库 用于与我的毛茸茸的猫进行交互 因此 我正在为 OCaml 编写绑定来简化与 fluffy 的交互 module type CAT sig type cat val find gt cat v
  • 尝试使用转义字符时 OCaml 正则表达式有问题

    我正在尝试使用 OCaml 为 C 的变体编写一个词法分析器 对于词法分析器 我需要匹配字符串 和 分别作为幂和或符号 这两个都是正则表达式中的特殊字符 当我尝试使用反斜杠转义它们时 没有任何变化 代码运行时就好像 仍然是行首而 仍然是 或
  • OCaml 对应于 Python 的“with”语句(自动释放资源)是什么?

    OCaml 中与 Python 的 with 语句相对应的是什么 with open test txt r as f Do stuff with f At this point f will always be closed even in
  • llvm OCaml 绑定

    我正在研究 llvm OCaml 绑定 我通过 opam 安装了 llvm 包 opam install llvm 当我在 utop 中使用 llvm 时 出现以下错误 require llvm Error The external fun
  • OCaml 中的类型共享 - 类型检查器错误

    编译这个程序时 module type Inc sig type t val inc t gt t end module type Dec sig type t val dec t gt t end module Merger I Inc
  • 是否可以在 OCaml 解释器中使用箭头键?

    每次我在解释器中使用这些键时 我都会不断出现如下符号 D C 我在 ZSH 中使用 Linux Mint 12 但是在 Ubuntu 中使用 bash 得到了相同的结果 另外 ssh 中也是同样的情况 库存 OCaml 顶层没有内置行编辑功
  • 在哪里可以找到 OCaml Option 模块?

    我的意思是这个模块 Option http ocaml lib sourceforge net doc Option html 我找不到它 open Option给我Error Unbound module Option并且没有 optio
  • Ocaml 中的 Socket onread、onready、onclose 事件处理函数

    我正在 Ocaml 中使用 TCP IP 套接字开发协议 并且我有兴趣实现事件驱动方法 基本上 我想创建事件处理函数 每当套接字接收到新数据或关闭或打开时调用 是否可以在 Ocaml 中完成而无需使用多线程手动实现 Thanks 是的 制作
  • 错误:无法安全地评估递归定义模块的定义

    我很想了解为什么会发生此错误以及解决该错误的最佳方法是什么 我有几个文件types ml and types mli它定义了一个变体类型value可以是许多不同的内置 OCaml 类型 float int list map set 等 由于
  • OCaml:如何运行包含库的脚本

    我正在按照 Real World OCaml 一书来学习 OCaml 许多程序都需要使用 Jane Street Core 库 当我在顶层使用这个核心库中的函数时 它工作得很好 在那里 我只需使用以下命令来打开 Core 库 use top
  • OCaml 中的线性类型

    Rust http www rust lang org 有一个线性类型系统 有什么 好的 方法可以在 OCaml 中模拟这个吗 例如 当使用 ocaml lua 时 我想确保仅当 Lua 处于特定状态 堆栈顶部的表等 时才调用某些函数 Ed
  • OCaml 2 和 3 之间的差异

    我有兴趣学习这门语言 但似乎有关该主题的教程和书籍很少 我只找到一本关于这个主题的合适的书 用 Objective Caml 这绝对是完美的 但问题是它是基于 2 04 版本的 所以我唯一关心的是使用这本书 对于 OCaml 3 x 是否会
  • OCaml 中的用户定义打印机

    printf fprintf等 全部接受 a转换 手册上说对于 a 用户定义的打印机 采用两个参数 并将第一个参数应用于 outchan 当前输出通道 和第二个参数 因此 第一个参数的类型必须为 out channel gt b gt un
  • 如何强制 OCaml 推断出更通用的类型?

    我想定义一个接受可选参数的函数 该参数是一个函数 a gt b 默认值应该是identity 实际上就是 a gt a 但我认为没有理由它不应该与更通用的兼容 a gt b 当我尝试时 let optional apply f i matc
  • 如何使用 Frama-c Value 插件的 Value.Eval_expr、Value.Eval_op 等模块中的函数

    我正在尝试创建一个 frama c 插件 该插件依赖于 Frama c Value 插件 我想获取并打印 C 源代码中所有左值的值集 为了做到这一点 我想使用 Value Eval exprs Value Eval op 等中可用的函数 例
  • 如何在ocaml中将字符串转换为整数列表?

    我需要在 ocaml 中传递两个列表作为命令行参数 我使用以下代码在程序中访问它 let list1 Sys argv 1 let list2 Sys argv 2 我需要将 list1 和 list2 作为整数列表 我收到错误 该表达式的
  • 为什么我必须将 Async 包装到另一个异步工作流程中并让!它?

    我试图了解 F 中的异步工作流程 但我发现有一部分我真的不明白 下面的代码工作正常 let asynWorkflow async let result Stream TryOpenAsync partition gt Async Await
  • 通过命令行参数选择要使用的 ocaml 模块

    在我的代码中我有module M Implementation1然后我参考M 代替Implementation1 问题是 我必须重新编译我的程序才能改变Implementation1 to Implementation2 我想通过命令行参数

随机推荐