Рекурсивна функция: този израз трябва да има тип единица.

Тази функция:

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.

Как мога да разреша това предупреждение?


person osolmaz    schedule 24.12.2012    source източник


Отговори (1)


Изглежда, че компилаторът ви предупреждава, че 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
...
person Jeffrey Scofield    schedule 24.12.2012