相关疑难解决方法(0)

249
推荐指数
7
解决办法
7万
查看次数

在OCaml中模拟try-with-finally

OCaml try .. with不提供finally像Java这样的子句.但是,这将是有用的,特别是在处理副作用时.例如,我想打开一个文件,将打开的文件传递给一个函数,然后关闭它.如果函数引发异常,我必须抓住它以便有机会关闭文件.当打开多个文件并且打开​​自身也可能失败时,这变得越来越复杂.是否有一个既定的编程模式来处理这个问题?

下面是一个说明问题的简单函数.f如果path提供了a,则将函数应用于属于文件的通道stdin.因为没有finally子句,所以close_in io出现两次.

let process f  = function 
    | Some path -> 
        let io = open_in path in 
            ( (try f io with exn -> close_in io; raise exn)
            ; close_in io
            )
    | None -> f stdin
Run Code Online (Sandbox Code Playgroud)

ocaml exception-handling

7
推荐指数
2
解决办法
3440
查看次数

标签 统计

c++ ×1

exception-handling ×1

ocaml ×1

raii ×1