OCaml: значения по умолчанию для аргументов функции?

В PHP значения по умолчанию для аргументов можно установить следующим образом:

function odp(ftw = "OMG!!") {
   //...
}

Есть ли аналогичная функциональность в OCaml?

Ответ 1

OCaml не имеет необязательных позиционных параметров, потому что, поскольку OCaml поддерживает currying, если вы не учитываете некоторые аргументы, это выглядит как частичное приложение. Однако для именованных параметров существуют необязательные именованные параметры.

Нормальные именованные параметры объявляются следующим образом:

let foo ~arg1 = arg1 + 5;;

Необязательные именованные параметры объявляются следующим образом:

let odp ?(ftw = "OMG!!") () = print_endline ftw;;

(* and can be used like this *)
odp ~ftw:"hi mom" ();;
odp ();;

Обратите внимание, что за любыми необязательными именованными параметрами должен следовать хотя бы один необязательный параметр, потому что иначе, например, "odp" выше будет выглядеть как частичное приложение.