是否可以在函数内部定义异常

2023-12-30

在 OCaml 中实现“提前返回”的一种方法是通过异常:

exception Exit

let myfunc () = 
    try
      for i = 0 to .... do
        if .. then raise Exit
      done; false
    with Exit -> true

但是,有没有办法声明这一点Exit函数体中出现异常,因此其名称对模块中的其他函数不可见?

(* I would like to do this, but it gives a syntax error *)
let myfunc () = 
    exception Exit
    try
      for i = 0 to .... do
        if .. then raise Exit
      done; false
    with Exit -> true

是的,您想要的可以通过使用本地模块来实现:

let myfunc () = 
  let module M = struct exception Exit end in
  try
    for i = 0 to 3 do
      if true then raise M.Exit
    done; false
  with M.Exit -> true

不过,这种风格读起来并不是特别愉快,所以我不推荐它。省略显示就足够了Exit如果您想对程序的其余大部分部分隐藏它,请在下一个模块界面上。

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

是否可以在函数内部定义异常 的相关文章

  • OCaml 中的“[< >]”是什么意思?

    我看过一些源代码 let rec parse document parser lt len parse int32 st gt gt parse list ES take int32 len st lt gt gt malformed pa
  • Ocaml 多态记录类型不太通用

    给定以下类型 type props state reactInstance props props state state updater event props state reactInstance gt event gt state
  • 修复 OCaml 中的数据类型

    Haskell 中的以下数据类型如何用 OCaml 或 SML 表示 newtype Fix f In f Fix f 我已经在邮件列表上回答了这个问题 https sympa inria fr sympa arc caml list 20
  • 正确编译子文件夹中的模块(ocamlbuild)

    我最近决定整理我的项目目录中的文件 我将几种不同文件类型的解析器移至它们自己的目录中 并决定使用 ocamlbuild 因为项目变得越来越复杂 简单的 shell 脚本不再足够 我能够通过使用一些基本规则修改 myocamlbuild 来成
  • 如何设置Emacs默认编译目录?

    我正在 Emacs 下编写 OCaml 代码 我有一个makefile在工作文件夹中 以及几个包含以下内容的子文件夹 ml文件 如果我启动M x compile and make在缓冲区上工作正常makefile 但不适用于 a 的缓冲区
  • 让menhir将用户定义的函数从.mly添加到.mli

    Menhir 允许将任意 ocaml 代码添加到 mly 文件的末尾 我想在其中声明一些函数 但我找不到一种方法让 menhir 将我的函数添加到 mli 文件中 以便它们从其他模块中可见 是否可以 答案很简单 那就是no 中定义的代码 m
  • OCaml 中的多态性 - 特别、参数、包含/子类型

    我在理解不同类型的多态性时遇到问题 特别是关于 OCaml 的多态性 我知道多态性允许 OCaml 中表示为 a 的多种类型 但我不明白不同类型的多态性是什么 如果有人能用相对低级的语言给我解释那就太棒了 临时 参数 包含 子类型 这是一个
  • 为什么 OCaml 有时需要 eta 扩展?

    如果我有以下 OCaml 函数 let myFun CCVector map 1 它在 Utop 中运行良好 并且 Merlin 不会将其标记为编译错误 然而 当我尝试编译它时 出现以下错误 错误 该表达式的类型 int a CCVecto
  • 尝试使用转义字符时 OCaml 正则表达式有问题

    我正在尝试使用 OCaml 为 C 的变体编写一个词法分析器 对于词法分析器 我需要匹配字符串 和 分别作为幂和或符号 这两个都是正则表达式中的特殊字符 当我尝试使用反斜杠转义它们时 没有任何变化 代码运行时就好像 仍然是行首而 仍然是 或
  • OCaml 的并行化能力状况如何?

    我对在项目中使用 OCaml 很感兴趣 但是我不确定它的并行化功能在哪里 OCaml中有消息传递能力吗 OCaml 是否能够有效地使用 1 个以上的 CPU 我读到的关于这个主题的大部分内容都是在 2002 年至 2006 年写的 我没有看
  • OCaml:从列表中删除重复项,同时保持右侧的顺序

    我刚刚读过这个线程 https groups google com d msg racket users BuUzcJtd3Ig zqYIjVyJdjoJ并觉得很有趣 我实施remove from the left几分钟后即可运行 remo
  • 使用 Opam 管理项目依赖关系

    我是 OCaml 的新手 我使用过的其他语言 例如 Scala Clojure Node js 上的 Javascript 都有包管理器 允许人们以干净的状态启动项目 该项目具有一组已声明的已知版本的依赖项 我正在尝试与 Opam 做类似的
  • 跨编译单元的 OCaml 递归模块

    我试图将以下递归模块拆分为单独的编译单元 具体来说 我希望 B 位于它自己的 b ml 中 以便能够与其他 A 一起重用它 module type AT sig type b type t Foo of b Bar val f t gt b
  • 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列表中获取子列表

    我正在查看列表文档 图书馆好像没有提供sublist功能 我正在尝试从中获取元素列表i to j 现在我必须把它写成 let rec sublist list i j if i gt j then else List nth list i
  • 类型变量和局部抽象类型有什么区别?

    我试图理解的目的局部抽象类型在 OCaml 中 局部抽象类型与类型变量有何不同 看来他们有相同的行为 Type variable let f x a a x val f a gt a
  • 如何使用List.fold_left?

    我仍在尝试了解如何fold left完全有效 它是否像这样迭代列表List iter 或者我的代码还有其他问题吗 我认为 e 是列表中的元素 所以它是一个元组 并且fst e获取元组的第一个元素并且snd e获取元组中的第二个元素 let
  • 如何在 OCaml 中使协变可观察

    我正在尝试为值制作一个包装器 允许调用者自行注册以获取有关它的通知 这是一些 工作 代码 module Thing sig type a t val make a gt a t val watch a gt unit gt a t gt u
  • 有人可以解释一下这个 OCaml 程序中使用的类型语法吗?

    以下类型取自这个问题 https stackoverflow com q 50586942 633183 contains an error later fixed by the OP type task Success a gt a ta
  • Ocaml 模块和包的区别

    我基本上是在尝试遵循这篇文章中的 stackoverflow 答案 OCaml 中 HttpRequest 的最佳模块是什么 https stackoverflow com questions 14134116 what is the be

随机推荐

  • 使用 Javascript 在文本区域的光标处插入文本

    我在网上寻找解决方案 有一些 但它们似乎都将代码拆分为支持 IE 和 Firefox 我想知道是否有一种更优雅的方法适用于每个浏览器 在光标处插入一些文本textarea 非常感谢 不 没有 IE 有它的TextRange反对做这项工作 I
  • 使用 Spring mockMvc 测试可选路径变量

    我在 Spring MVC 中有一个带有可选路径变量的方法 我正在尝试在未提供可选路径变量的情况下测试它 来自控制器的片段 要调用的资源 URI RequestMapping value some uri foo bar method Re
  • 在 Python 中处理惰性 JSON - “期望属性名称”

    我希望使用 Pythons 2 7 json 模块来处理各种 JSON 提要 不幸的是 其中一些提要不符合 JSON 标准 具体来说 某些键没有用双语音标记 包装 这导致 Python 出现错误 在编写一段丑陋的代码来解析和修复传入数据之前
  • API 应该是 %100 同步或 %100 异步示例

    当我在学习的时候https nodejs org api process html process process nexttick callback arg https nodejs org api process html proces
  • 实现 Endless RecyclerView

    我想实现一个无尽的 RecyclerView 但到目前为止 我遇到的所有实现和教程都描述了从服务器加载数据 然后加载它或使用循环动态添加元素 就我而言 我已经有一个大的 ArrayList 其中包含我想要在 RecyclerView 中显示
  • SQL Server 索引使用统计信息多久更新一次以及什么触发它?

    还有一些其他类似的问题 但请不要混淆 我知道有一个功能STATS DATE 知道统计数据在哪里更新 这很好 但我想知道是什么触发了该统计数据的更新或截止 我知道也有这样的报告 但上周我看到了某些服务器中的统计数据 它们为我提供了非常好的信息
  • Django:多对多关系的反向列表?

    我在 models py 中有两个简单的模型 Service 和 Host Host services 与 Service 具有 m2m 关系 换句话说 一台主机有多个服务 一个服务可以驻留在多个主机上 基本的 m2m 模型 py clas
  • 有没有办法创建带有两个输入字段的提示?

    有没有办法在 JavaScript 中创建带有两个输入字段的提示 我尝试了该代码 但它对我没有帮助 var a prompt A var b prompt B alert a n b 对于弹出的操作系统或本机浏览器窗口来说这是不可能的 您必
  • mongoDB时域触发器?

    我有一个基于节点的后端 与 mongoDb 实例集成 数据库有一组日历事件 每个事件都有一个唯一的日期时间字段 我正在尝试考虑在设定时间前 15 分钟执行提醒功能的最佳方式 我想到的唯一想法是使用 setInterval 一致地查询数据库
  • Python - 2D列表 - 查找一列中的重复项并对另一列中的值求和

    我有一个二维列表 其中分别包含足球运动员的姓名 他们进球的次数以及他们尝试射门的次数 player stats Adam 5 10 Kyle 12 18 Jo 20 35 Adam 15 20 Charlie 31 58 Jo 6 14 A
  • 将列表样式添加到 p 标签[重复]

    这个问题在这里已经有答案了 我知道这看起来很愚蠢 但我正在尝试将列表样式添加到 p 标签 由于 php 的循环方式 我无法将它们放入 li 标签中 所以我有点想把它们设计得像一个列表 我尝试过这样的事情 taskSubList text i
  • 对于随机浮点集的最佳排序算法是什么?

    我的一位同事今天下午刚刚提出了这个问题 这让我有些好奇 我精通排序算法 但缺乏 compsci compeng 的正式学位 我有点不愿意承认这一点 无法真正把手指放在这个上 p 哦 是的 这只是在 C NET 实现的上下文中 以防万一发生一
  • C++ 数组可以在内存边界结束吗?

    C 标准 以及就此而言的 C 允许创建 但不是取消引用 指向超出数组末尾的一个元素的指针 这是否意味着数组永远不会被分配到其最后一个元素在内存边界结束的位置 我知道在实践中 部分 所有实现可能遵循这一约定 但以下哪一项是正确的 这实际上是错
  • 如何为 CreateProcess() 启动的进程设置区域设置

    当启动一个进程时CreateProcessW 是否可以使用与配置为系统范围默认代码页不同的 MBCP 区域设置 代码页创建进程 在目标进程中 这应该与调用具有相同的效果 setmbcp 目标进程不支持 unicode 并且使用普通的main
  • 如果 REST 应用程序应该是无状态的,那么如何管理会话?

    我需要一些澄清 我一直在阅读有关 REST 的内容 并构建 RESTful 应用程序 根据维基百科 REST 本身被定义为代表性状态转移 因此我不明白这一切无国籍官样文章每个人都在不断吐槽 来自维基百科 在任何特定时间 客户端可以在 应用程
  • 在非 Symfony 项目中使用 Symfony 2 组件?

    为了在 PHP 中获得 XLIFF 2 支持 请在另一个答案 https stackoverflow com a 22057407 282729 有人建议 使用 Symfony 2 翻译组件 所以我下载了来自Github https git
  • ES6中的新规范“块级函数声明”是什么意思?

    我正在查看 es6 兼容性表尝试学习Here https kangax github io compat table es6 block level function note in the bindings部分它说 块级函数声明 除了官方
  • 如何在帧之间保持影片剪辑的颜色?

    我的应用程序有 2 个框架 在第 1 帧中有 5 个 MC 在DOUBLE CLICK事件目标颜色发生变化并转到下一帧 2 在第 2 帧中 我有一个返回到第 1 帧的按钮 当我返回到第 1 帧时如何保持 MC 颜色 public class
  • set -e 和 exec "$@" 对 docker 入口点脚本有什么作用?

    我注意到许多 docker 的entrypoint sh 脚本都会执行以下操作 bin bash set e code exec 什么是set e和exec for 它基本上需要传递给的任何命令行参数entrypoint sh并将它们作为命
  • 是否可以在函数内部定义异常

    在 OCaml 中实现 提前返回 的一种方法是通过异常 exception Exit let myfunc try for i 0 to do if then raise Exit done false with Exit gt true