В OCaml 4.08 новое предупреждение о частичных приложениях выводится по умолчанию, например:
let _ = (Format.printf "side-effect!@."; List.iter (fun () -> ()))
2 | (Format.printf "side-effect!@."; List.iter (fun () -> ()))
^^^^^^^^^^^^^^^^^^^^^^^^
Warning 5: this function application is partial,
maybe some arguments are missing.
Попытка отключить его локально, добавив аннотации везде, похоже, не работает:
let[@warning "-5"] _ [@warning "-5"] =
(Format.printf "side-effect!@."; List.iter (fun () -> ()))[@@warning "-5"]
Единственный способ, который работает, - это использовать технику [@@@warning "-5"]
в качестве , упомянутого здесь .Однако в этом вопросе упоминается, что
Локальное отключение предупреждений с помощью [@warning "…"] и [@@ warning "…"] недостаточно поддерживается для версий OCaml, предшествующих 4.06.0 * 1014.*
Каким должен быть в этом случае синтаксис для OCaml 4.08, чтобы локально отключать такие предупреждения?
Редактировать : в соответствии с предложением glennsl, заменив let _ = ...
наignore (...)
предлагает альтернативу (добавление [@@warning "-5"]
после того, как ignore (...)
, кажется, работает), но она менее однородна, поскольку объявления верхнего уровня не могут быть заменены таким образом, хотя их можно безопасно окружить [@@@warning "-5"]/[@@@warning "+5"]
1 .Тем не менее, это не объясняет, почему моя первая попытка не сработала: она написана неправильно, это из-за дизайна или, возможно, из-за недосмотра?
1 Этот «взлом» такжеимеет недостаток, заключающийся в возможности изменения предыдущего состояния;например, если предупреждение 5 ранее было отключено на глобальном уровне, это может привести к его непреднамеренному повторному включению.