OCaml 属性

4
我在手册中发现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文件中设置什么吗?还有其他我遗漏的地方吗?


似乎对我来说,在类型“t”定义之后加上一个[@deprecated "don't use this"](只有一个@)是有效的(在OCaml 4.02.3和4.03.0中测试过)。但是,无论是@deprecated还是@@deprecated都不适用于let x = 1表达式。还有一个奇怪的问题:最后一行会打印两次“警告3:已弃用:Y don't use this”。 - Anton Trunov
2个回答

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

谢谢,这很有用。这表明在cmi文件中存储(和访问)注释的方法。是这样吗?如果是,有没有一种查看它们的方法? - Gregory
我认为目前没有办法看到它们。这将是ocp-index/browser的一个很棒的功能!你能提出建议吗? - Drup

1
似乎从4.02.3版本开始可用,对于此版本,在您的代码之前添加#require "ppx_jane";;。在4.03.0版本中,它可以原生地工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接