OCaml:使用行号信息定义复合异常类型
我正在处理一些OCaml:使用行号信息定义复合异常类型,ocaml,Ocaml,我正在处理一些OCaml代码,我想定义一个复合异常类型;详情如下: type exceptbase = string * string exception UndefinedTyp of exceptbase 我希望这种例外的第一个要素是。 但是,当我使用下面的一些异常处理代码时,它无法编译 raise UndefinedTyp (__LOC__, "some exception messages") 下面是我的问题: 如何正确定义这样的复合异常类型 请注意,由于第一个元素始终是,\uuuu
OCaml
代码,我想定义一个复合异常类型;详情如下:
type exceptbase = string * string
exception UndefinedTyp of exceptbase
我希望这种例外的第一个要素是。
但是,当我使用下面的一些异常处理代码时,它无法编译
raise UndefinedTyp (__LOC__, "some exception messages")
下面是我的问题:
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
,我有没有办法省力,并使用\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
您只需要一些括号:
# type exceptbase = string * string
exception UndefinedTyp of exceptbase;;
type exceptbase = string * string
exception UndefinedTyp of exceptbase
# raise (UndefinedTyp (__LOC__, "some exception message"));;
Exception:
UndefinedTyp
("File \"//toplevel//\", line 2, characters -13--6",
"some exception message").
关于第二点,在普通的OCaml中,恐怕不可能省略
\uuuuuuuuuuuuuuu
参数
但是,您可以编写一个处理器,将未定义的“某些异常消息”
重写为未定义的(\uu LOC\uuuu,“某些异常消息”)
。今天,我们使用PPX框架来编写这样的预处理器
顺便说一句,OCaml的异常回溯包含引发异常的位置。通过设置环境变量OCAMLRUNPARAM=b,当未捕获的异常终止程序时,OCaml运行时会将其与源代码位置一起打印。通过编程
Printexc
模块提供了一些API来获取它。谢谢Jeffrey。那么,我是否有可能使用\uuuu LOC\uuu
来“预占用”第一个元素?非常感谢。最后,我选择使用Core
中的异常功能,因为它已经提供了这样的功能。。。请看一下这一部分。回溯不是一个核心特性。您可以通过添加OCAMLRUNPARAM=b
或设置Printexc.record\u backtraces
将它们与普通OCaml一起使用。谢谢!我最终使用了Core
提供的异常处理。。请看一下这个部分。