1

这个功能:

let rec foo () =
    try
    let line = input_line stdin in
    (try
        Mparser.tex_expr lexer_token_safe (Lexing.from_string line);
        print_string ("SUCCESS\n")
        with
        Mtexutil.Illegal_tex_function s -> print_string ("$T" ^ s ^ " " ^ line ^ "\n")
          | LexerException s            -> print_string ("$L" ^ line ^ "\n")
          | Parsing.Parse_error         -> print_string ("$P" ^ line ^ "\n")
          | _                           -> print_string ("$S " ^ line ^ "\n"));
    flush stdout;
    foo ();
    with
    End_of_file -> ()
;;

给出错误:

Warning 10: this expression should have type unit.

对于以 . 开头的行Mparser.tex

如何解决此警告?

4

1 回答 1

4

编译器似乎在警告您Mparser.tex_expr返回一个您没有使用的值。您可以通过明确表示您故意丢弃价值来摆脱警告。这就是该ignore功能的用途:

ignore (Mparser.tex_expr lexer_token_safe (Lexing.from_string line));

let ... in在某些情况下,我认为使用分号而不是分号会更好地阅读:

let _ = Mparser.tex_expr lexer_token_safe (Lexing.from_string line) in
...
于 2012-12-24T18:26:48.893 回答