默认参数值的奇怪行为

时间:2014-01-25 18:02:24

标签: ocaml

我刚开始学习OCaml。我有一个问题,为什么每次打电话给他时这段代码会输出不同的结果?

let b () = Unix.time ();;
let a ?(c = b ()) () = c;;
a ();;
...
a ();;

我预计, c 的默认值将计算一次。

1 个答案:

答案 0 :(得分:4)

可选参数在OCaml手册的Section 6.7中描述。这就是它的内容:

  

表格的功能

 fun ? lab :(  pattern =  expr0 ) ->  expr
  

相当于

fun ? lab : ident ->
    let pattern = match ident with
   | Some ident -> ident
   | None -> expr0
in
expr
  

其中ident是一个新变量,除了在计算expr0时未指定。

如果未提供可选参数,则显示在每次调用时评估expr0。即,expr0在lambda内,而不在外面。