2007/05/03

Erlang での unwind-protect

Common Lisp での次の式は


(unwind-protect (print "protected") (error error))

Erlang では次のようになります。

try erlang:error(error) after io:format("protected") end.

with-open-file(むしろ call-with-input-file でしょうか) 相当の実装は次のようになります。

-module(with).
-compile(export_all).

open_file(File, Fun, Mode) ->
{ok, IoDevice} = file:open(File, Mode),
try Fun(IoDevice)
after
file:close(IoDevice)
end.

test() ->
File = "/tmp/a.txt",
open_file(File,
fun(IoDevice) ->
io:write(IoDevice, "Hello")
end,
write),
open_file(File,
fun(IoDevice) ->
io:get_line(IoDevice, "")
end,
read).

0 件のコメント: