OCaml 属性

OCaml attributes

我正在查看手册,发现 OCaml 中有一些属性用于将事物声明为已弃用(参见 http://caml.inria.fr/pub/docs/manual-ocaml/extn.html),但我不知道如何让编译器识别它们。

这是我写的程序:

let x = 1 [@@ocaml.deprecated "don't use this"]

type t = X | Y [@@ocaml.deprecated "don't use this"]

let _ =
  let y = Y in
  match y with
  | X ->
    print_string (string_of_int x)
  | Y -> assert false

(我也尝试了 [@@deprecated ...] 而不是 [@@ocaml.deprecated ...],结果相同)。我在 运行:

时没有收到任何警告
ocamlbuild src/trial.byte

我的 _tags 文件中是否需要设置某些内容?我还遗漏了什么吗?

似乎从 4.02.3 开始工作,对于此版本,#require "ppx_jane";; 在您的代码之前。在 4.03.0 中,它在本地工作。

已弃用的注释仅适用于值(不适用于类型),并且主要用于签名。在你的情况下,这里应该如何完成:

module M : sig
  val x : int [@@deprecated "don't use this"]
  type t =
    | X [@deprecated "don't use this"]
    | Y [@deprecated "don't use this"]
end = struct
  let x = 1
  type t = X | Y
end
open M

let _ =
  let y = Y in
  match y with
  | X ->
    print_string (string_of_int x)
  | Y -> assert false