2009-09-15 5 views

ответ

23

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» выше будет выглядеть как частичное приложение.

+0

Как правило, я просто использовал бы «let foo arg1 = arg1 + 5 ;;», без «~». В чем смысл этого? –

+0

вы можете прочитать о них здесь: http://caml.inria.fr/pub/docs/manual-ocaml/manual006.html#htoc37 – newacct

+2

Обновленная ссылка: http://caml.inria.fr/pub/docs/ ручной OCaml/lablexamples.html # sec43 – neo