2016-05-04 21 views
4

Ich schaute auf das Handbuch und fand, dass es in OCaml Attribute gibt, Dinge als veraltet zu deklarieren (siehe http://caml.inria.fr/pub/docs/manual-ocaml/extn.html), aber ich kann nicht herausfinden, wie sie vom Compiler erkannt werden.OCaml Attribute

Hier ist das Programm, das ich schrieb:

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 

(Ich habe auch versucht [@@deprecated ...] anstatt [@@ocaml.deprecated ...] mit dem gleichen Ergebnis). Ich erhalte keine Warnungen, wenn ich laufe:

ocamlbuild src/trial.byte 

Gibt es etwas, das ich in meiner _tags Datei einrichten müssen? Gibt es noch etwas, das mir hier fehlt?

+0

Scheint, wie (1) '[@deprecated "nicht dieses verwenden"]' (mit einer '@') nach der Art 'T' Definition Werke für mich (getestet mit OCaml 4.02.3 und 4.03.0); (2) weder '@ deprecated' noch' depotated' funktionieren nach dem Ausdruck "let x = 1". Es gibt auch eine seltsame Eigenart: 'Warnung 3: veraltet: Y nicht verwenden 'wird zweimal für die letzte Zeile gedruckt. –

Antwort

3

Die veraltete Annotation ist nur für Werte (nicht für Typen) und meist in Signaturen verfügbar. In Ihrem Fall hier, wie es getan werden soll:

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

Danke, das ist gut zu wissen. Dies deutet darauf hin, dass es eine Möglichkeit gibt, Anmerkungen in einer cmi-Datei zu speichern (und darauf zuzugreifen). Ist das richtig? Wenn ja, gibt es eine Möglichkeit, sie zu sehen? – Gregory

+0

Ich glaube nicht, dass es einen Weg gibt, sie im Moment zu sehen. Dies wäre eine hervorragende Funktion für OCP-Index/Browser! Könnten Sie es vorschlagen? – Drup

1

Scheint von 4.02.3, für diese Version, #require "ppx_jane";; vor Ihrem Code zu arbeiten. Mit 4.03.0 funktioniert es nativ.