OCaml属性

时间:2016-05-04 18:24:09

标签: ocaml ppx

我查看了手册,发现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文件中是否需要设置一些内容?还有其他我在这里缺少的东西吗?

2 个答案:

答案 0 :(得分:3)

不推荐使用的注释仅适用于值(不适用于类型),主要适用于签名。在你的情况下,在这里应该如何做:

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

答案 1 :(得分:1)

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