Во-первых, у меня под рукой нет простого воспроизводимого примера, поскольку код обращается к механизму MATLAB, который требует лицензии. Тем не менее, возможно, удастся построить аналогичный пример, просто используя C. У меня есть следующий фрагмент теста:
ei1 :: Either SomeException MAnyArray <- try $ engineGetVar eng foopi
putStrLn $ assert (isRight ei1) " Can clearVar once"
clearVar eng foopi
ei2 :: Either SomeException MAnyArray <- try $ engineGetVar eng foopi
putStrLn $ assert (isLeft ei2) $
" Can't clearVar twice: " <> (show $ lefts [ei2])
putStrLn " Finished testClearVar"
Это приводит к выводу:
Can clearVar once
Error using save
Variable 'foopi' not found.
Can't clearVar twice: []
Finished testClearVar
Немного сбивает с толку это выражение, поскольку утверждение кажется успешным (что означает, что ei2
- это значение Left
, но при вызове lefts [ei2]
значения Left не найдены):
putStrLn $ assert (isLeft ei2) $
" Can't clearVar twice: " <> (show $ lefts [ei2])