Я пытаюсь написать функцию, которая создает каталог, но не вызывает ошибку, когда каталог уже существует. Это функция:
fun ensureDir s =
(OS.FileSys.mkDir s)
handle OS.SysErr (_, SOME Posix.Error.exist) => ()
Я основал шаблон OS.SysErr (_, SOME Posix.Error.exist)
на том факте, что OS.FileSys.mkDir
завершается с ошибкой со следующим сообщением об ошибке, когда каталог уже существует:
Exception- SysErr ("File exists", SOME EEXIST) raised
uncaught exception SysErr [SysErr: File exists [exist]]
raised at: <mkdir.c>
Однако я получаю эту ошибку, когда пытаюсь определить функцию в оболочке Poly/ML:
poly: : error: qualified name Posix.Error.exist illegal here
Static Errors
Это ошибка в SML/NJ:
Error: variable found where constructor is required: Posix.Error.exist
Какую ошибку я допустил в определении функции?
(Poly/ML 5.7.1; SML/NJ 110.79; Ubuntu 20.04)
Posix.Error.exist
— это val
, а не конструктор (например, SOME
), поэтому
вы не можете использовать его как образец в конструкции сопоставления с образцом. Здесь
эквивалентный код того, что вы намеревались сделать.
fun ensureDir s =
(OS.FileSys.mkDir s)
handle e as (OS.SysErr (_, SOME err)) =>
if err = Posix.Error.exist
then ()
else raise e
;