2016-05-04 16 views
4

私はマニュアルを見て、OCamlに廃止予定のものを宣言するための属性があることを発見しましたが(http://caml.inria.fr/pub/docs/manual-ocaml/extn.html参照)、コンパイラがそれらを認識させる方法を理解できません。OCamlの属性

ここに私が書いたプログラムです:

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ファイルで設定する必要があるものはありますか?私はここで行方不明の何か他にありますか?

+0

は、(1) 'のように思える[@deprecated「を使用しないでください、この」]'( '1と@')タイプ 'T'の定義作品の後私にとっては(OCaml 4.02.3と4.03.0の両方でテスト済み)。 (2) 'let x = 1'式の後に' @ deprecated'と '@@ deprecated'のどちらも動作しません。 'Warning 3:deprecated:Y これは使わないでください'という最後の行に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 
+0

ありがとう、これは知っておくと良いです。これは、cmiファイル内に注釈を格納(およびアクセス)する方法があることを示しています。そうですか?もしそうなら、それらを見る方法はありますか? – Gregory

+0

私は現時点でそれらを見る方法はないと思います。これはocp-index/browserの優れた機能です!あなたはそれを提案できますか? – Drup

1

このバージョンでは、コードの前に#require "ppx_jane";; 4.02.3から動作するようです。 4.03.0では、ネイティブに動作します。