0
    type 'a result =
        Success of 'a
       |Failed of exn

    let finally f x cleanup =
        let result =
            try Success (f x) with
                exn ->
                    Failed exn
    in
        cleanup ();
        match result with
            Success y -> y
           |Failed exn -> raise exn

有几个地方看不懂:

  1. finally 的语法

  2. exn 是一种类型,我们如何在模式匹配中使用它?失败的exn?

  3. 成功 (fx) 与 exn 匹配?

  4. cleanup 和 f x 之间的关系。

4

1 回答 1

0
  1. 假设使用最终会使用类似的东西:

    let h = open_db () in
    let f db = ... return someting from db in
    let res = finally f h (fun () -> close_db h) in
    
  2. exn 是一种类型,但类型和值的命名空间几乎没有在 OCaml 中混合。所以,当你写Failed exn exn的是名字绑定

  3. Success (f x)如果在评估期间引发异常,则不返回f x

  4. x是你应该在 finally 分支中释放的资源,f对 created 做一些工作x

于 2013-10-08T15:53:44.040 回答