Распечатать сообщение в блоке try / with без значения возврата в Ocaml - PullRequest
0 голосов
/ 09 февраля 2020

Я пишу тестовый модуль для базового интерпретатора c -didacti c в OCaml, поэтому у меня есть тесты, которые возвращают правильное выразительное значение (evT) и тесты, которые просто терпят неудачу, и "выбрасывают" failwith ("что-то") операторы.

Если я скомпилирую и запусту файл, очевидно, что при первом сбое программа завершится. Поэтому я использую блок try / with, чтобы предотвратить это и продолжить процесс тестирования. Я просто хочу напечатать сообщение об ошибке без возврата какого-либо значения, НО оно продолжает говорить, что ожидает выразительное значение вместо единицы.

Вот фрагмент из моего кода:

try
    eval (Dict([("",Eint(30));("mele",Eint(40))])) myEnv
with
    Failure(msg) -> Printf.printf "%s" msg
;;

И это вывод:

404 |     Failure(msg) -> Printf.printf "%s" msg
                          ^^^^^^^^^^^^^^^^^^^^^^
Error: This expression has type unit but an expression was expected of type
         evT

1 Ответ

0 голосов
/ 09 февраля 2020

Если вам не нужно значение, возвращаемое eval, вы можете просто проигнорировать его:

let _ : evT = eval (Dict([("",Eint(30));("mele",Eint(40))])) myEnv in ()

Но тогда что вы на самом деле тестируете? Только что не бросает? Разве вы не должны также проверять, что результат верен?

В качестве альтернативы, если вам НУЖНО значение вне блока try, то вам понадобится значение в случае, когда вы перехватываете исключение а также, что, по сути, и есть сообщение об ошибке. Единственный другой вариант - отменить программу, которая, как я понимаю, вам не нужна.

...