递归函数:此表达式应具有类型单位。

时间:2012-12-24 18:15:23

标签: ocaml

此功能:

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开头的行。

如何解决此警告?

1 个答案:

答案 0 :(得分: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
...